Changeset: 86f2271d0faa for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=86f2271d0faa
Modified Files:
monetdb5/extras/crackers/crackers.mx
monetdb5/extras/crackers/crackers_selecthol_ops.mx
monetdb5/extras/crackers/crackers_selectholpl_ops.mx
Branch: holindex
Log Message:
Implement sum as a separate operator (just for result verification).
diffs (truncated from 464 to 300 lines):
diff --git a/monetdb5/extras/crackers/crackers.mx
b/monetdb5/extras/crackers/crackers.mx
--- a/monetdb5/extras/crackers/crackers.mx
+++ b/monetdb5/extras/crackers/crackers.mx
@@ -159,6 +159,8 @@ module crackers;
@:TypeSwitch_1(Updates)@
@:TypeSwitch_2(Sideways)@
@:TypeSwitch_1(JoinSelect)@
+@:TypeSwitch_1(Aggregation)@
+
command getTotalStorage( ):void
address CRKgetTotalStorage
@@ -816,8 +818,16 @@ command fmcreateMaphol(b:bat[:oid,:@1],b
address CRKcreateFullMaphol_@1_@2
comment "make new map for debugging";
@
+@= Aggregation
+command sumhol(b:bat[:any_1,:@2],l:@2,h:@2,li:bit,hi:bit):@2
+address CRKsumholBounds_@2
+comment "Calculate aggregate sum of range l-h.";
-
+command sumholpl(b:bat[:any_1,:@2],l:@2,h:@2,li:bit,hi:bit):@2
+address CRKsumholplBounds_@2
+comment "Calculate aggregate sum of range l-h.";
+@
+
@h
/*
* @- Header file
diff --git a/monetdb5/extras/crackers/crackers_selecthol_ops.mx
b/monetdb5/extras/crackers/crackers_selecthol_ops.mx
--- a/monetdb5/extras/crackers/crackers_selecthol_ops.mx
+++ b/monetdb5/extras/crackers/crackers_selecthol_ops.mx
@@ -62,6 +62,7 @@ crackers_export str CRKselecthol_@1(int
crackers_export str CRKuselecthol_@1(int *vid, int *bid, @1 *low, @1 *hgh);
crackers_export str CRKthetaselecthol_@1(int *vid, int *bid, @1 *val, str *op);
crackers_export str CRKthetauselecthol_@1(int *vid, int *bid, @1 *val, str
*op);
+crackers_export str CRKsumholBounds_@1(int *vid, int *bid, @1 *low, @1 *hgh,
bit *inclusiveLow, bit *inclusiveHgh);
@
@c
@@ -180,7 +181,10 @@ CRKthetauselecthol_@1(int *vid, int *bid
return CRKuselectholBounds_@1(vid, bid, low, high, &lin, &rin,
&isIdleQuery);
}
-
+str
+CRKsumholBounds_@1(int *vid, int *bid, @1 *low, @1 *hgh, bit *inclusiveLow,
bit *inclusiveHgh){
+ return CRKRangeSumTree_@1(vid, bid, low, hgh, inclusiveLow,
inclusiveHgh, FALSE);
+}
@
@@ -282,9 +286,9 @@ createView:
@
@= RangeSelectBody
- @1 *t0;
+
BAT *b,*c,*bo;
- //BAT *view;
+ BAT *view;
int m;
int *t;
int createIndex=0;
@@ -303,19 +307,17 @@ createView:
int gapL = 1;
int gapH = 1;
bit rippledDeletions = FALSE;
- struct Node *lowNode=NULL, *hghNode=NULL, *lowNodeNext=NULL, *temp,
*stopNode;
+ struct Node *lowNode=NULL, *hghNode=NULL, *lowNodeNext=NULL, *temp;
BUN idxFirst;
struct timeval tv0, tv1;
- double wt=0, ct=0,st=0;
+ double wt=0, ct=0;
bit copy=TRUE;
- unsigned long long sum = 0;
int countBatElements=0;
int L1=0; /*Number of elements that can fit into L1 cache (size: 32KB)*/
/*FILE *ofp;
char outputFilename1[] =
"/export/scratch2/petraki/experiments_1st_paper/experiments/stochastic/idle_time_2/pieces_holistic.txt";*/
FrequencyNode* FN;
FrequencyNode *FrequencyStructA = getFrequencyStruct('A');
- (void) tail;
gettimeofday(&tv0,0);
@@ -395,8 +397,6 @@ createView:
BBPincref(b->batCacheid,TRUE);
BBPunfix(bo->batCacheid);
- gettimeofday(&tv1,0); ct+=dt(tv0,tv1); tv0=tv1;
- fprintf(stderr,"Wait time: %9.6lf Selection time:
%9.6lf\n",wt,ct);
goto tempcreateView;
}
else{
@@ -638,13 +638,86 @@ createView:
/*fprintf(ofp,"%d\n",FN->c);
fclose(ofp);*/
-
- //gettimeofday(&tv1,0); ct+=dt(tv0,tv1); tv0=tv1;
- //fprintf(stderr,"Wait time: %9.6lf Selection time: %9.6lf\n",wt,ct);
+
/*@:CreateResult()@*/
tempcreateView:;
+ if (!tail)
+ view = BATslice(VIEWhead_(b, BAT_READ), vl, vh+1);
+ else
+ view = BATslice(b, vl, vh+1);
+
+ *vid = view->batCacheid;
+ BBPkeepref(*vid);
+ BBPunfix(b->batCacheid);
+ BBPunfix(c->batCacheid);
+ if (createIndex==1)
+ {
+ MT_lock_unset(&CRKIndexLock,"Cracker Index Lock");
+ createIndex=0;
+ }
+ else
+ MT_lock_unset(&CrackerIndex[m].columnLock,"Lock Attribute");
+
+ gettimeofday(&tv1,0); ct+=dt(tv0,tv1); tv0=tv1;
+ if(*isIdleQuery==FALSE)
+ fprintf(stderr,"Wait time: %9.6lf Selection time:
%9.6lf\n",wt,ct);
+
+ return MAL_SUCCEED;
+@
+@= RangeSumBody
+ int m;
+ @1 *t0;
+ BAT *b,*c;
+ int *t;
+ bit foundLow=0, foundHgh=0;
+ bit LBound=FALSE;
+ oid vl=0, vh=0, posh;
+ BUN idxFirst;
+ unsigned long long sum = 0;
+ /* vl and vh are the low and high index values to create the view with
the result */
+ oid cl1=0, ch1=0, cl2=0, ch2=0;
+ struct Node *lowNode=NULL, *hghNode=NULL, *lowNodeNext=NULL, *temp,
*stopNode;
+ (void) tail;
+
+ m = existsCrackerIndex(*bid);
+
+ if(m == -1)
+ throw(MAL, "crackers.crackRange", "Index does not exist");
+
+ /* Take the index of the bat */
+ if ((c = BATdescriptor(CrackerIndex[m].cid)) == NULL)
+ throw(MAL, "crackers.crackRange", "Cannot access crack index");
+
+ /* Take the copy of the bat for which we maintain the index */
+ if ((b = BATdescriptor(CrackerIndex[m].cbid)) == NULL)
+ throw(MAL, "crackers.crackRange", "Cannot access crack index");
+
+ MT_lock_set(&CrackerIndex[m].columnLock,"Lock Attribute");
+
+ /* find out where in the index the low falls */
+ foundLow = GetLow_@1(*low, *inclusiveLow, CrackerIndex[m].Tree, c,
BUNfirst(c), &cl1, &ch1, 0, BUNlast(b)-(oid)1,&LBound);
+
+ /* find out where in the index the high falls */
+ foundHgh = GetHgh_@1(*hgh, *inclusiveHgh, CrackerIndex[m].Tree, c,
BUNfirst(c), &cl2, &ch2, 0, BUNlast(b)-(oid)1);
+
+ /*need to increase one position for the low bound only since we always
store the previous position in the index*/
+ if (cl1 != 0 && LBound==FALSE) cl1++;
+ if (cl2 != 0) cl2++;
+
+ /* If one or both of the result view bounds were not found using the
+ index then we have to crack */
+ if (foundLow == 0 || foundHgh == 0) {
+ throw(MAL, "crackers.crackRange", "Range is not found in
index.");
+ } else {
+ t = (int *) Tloc(b, BUNfirst(b));
+ vl = cl1;
+ if ((vl == 0) && (*t < *low) && (*inclusiveLow == TRUE))
+ vl = vl + 1;
+ vh = ch2;
+ }
+
t0 = (@1 *)Tloc(b, BUNfirst(b));
*vid = 0;
@@ -670,7 +743,6 @@ createView:
stopNode = findNodeH_@1(*hgh, *inclusiveHgh, CrackerIndex[m].Tree, c,
idxFirst, NULL);
- gettimeofday(&tv1,0); ct+=dt(tv0,tv1); tv0=tv1;
while (1){
hghNode = (lowNode == NULL)? lowNodeNext :
findNextPiece(lowNode);
@@ -687,7 +759,6 @@ createView:
lowNode = hghNode;
vl = vh+1;
}
- gettimeofday(&tv1,0); st+=dt(tv0,tv1); tv0=tv1;
// verify the result
if (!(sum == ((unsigned long long) *hgh - *low) * ((unsigned long long)
*hgh + *low - 1)/ 2)){
@@ -697,23 +768,11 @@ createView:
assert(0);
}
+ fprintf(stderr,"sum=%llu \n",(unsigned long long) sum);
+
BBPunfix(b->batCacheid);
BBPunfix(c->batCacheid);
-
- if(*isIdleQuery==FALSE)
- fprintf(stderr,"wt=%9.6lf ct=%9.6lf st=%9.6lf lo=%d, hi=%d
sum=%llu\n",wt,ct,st,(int) *low, (int) *hgh,(unsigned long long) sum);
-
- //fprintf(out,"%9.6lf %9.6lf %9.6lf\n",wt,ct,st);
- //fclose(out);
-
- if (createIndex==1)
- {
- MT_lock_unset(&CRKIndexLock,"Cracker Index Lock");
- createIndex=0;
- }
- else
- MT_lock_unset(&CrackerIndex[m].columnLock,"Lock Attribute");
-
+ MT_lock_unset(&CrackerIndex[m].columnLock,"Lock Attribute");
return MAL_SUCCEED;
@
@= crackOperations
@@ -1006,6 +1065,10 @@ static str
CRKRangeTree_@1(int *vid, int *bid, @1 *low, @1 *hgh, bit *inclusiveLow, bit
*inclusiveHgh, bit tail, bit *isIdleQuery){
@:RangeSelectBody(@1,@2,@3,@4,)@
}
+static str
+CRKRangeSumTree_@1(int *vid, int *bid, @1 *low, @1 *hgh, bit *inclusiveLow,
bit *inclusiveHgh, bit tail){
+ @:RangeSumBody(@1,@2,@3,@4,)@
+}
static str
CRKRangeLeftNilTree_@1(int *vid, int *bid, @1 *hgh, bit *inclusiveHgh, bit
tail, bit *isIdleQuery){
diff --git a/monetdb5/extras/crackers/crackers_selectholpl_ops.mx
b/monetdb5/extras/crackers/crackers_selectholpl_ops.mx
--- a/monetdb5/extras/crackers/crackers_selectholpl_ops.mx
+++ b/monetdb5/extras/crackers/crackers_selectholpl_ops.mx
@@ -64,6 +64,7 @@ crackers_export str CRKselectholpl_@1(in
crackers_export str CRKuselectholpl_@1(int *vid, int *bid, @1 *low, @1 *hgh);
crackers_export str CRKthetaselectholpl_@1(int *vid, int *bid, @1 *val, str
*op);
crackers_export str CRKthetauselectholpl_@1(int *vid, int *bid, @1 *val, str
*op);
+crackers_export str CRKsumholplBounds_@1(int *vid, int *bid, @1 *low, @1 *hgh,
bit *inclusiveLow, bit *inclusiveHgh);
@
@c
@@ -180,6 +181,10 @@ CRKthetauselectholpl_@1(int *vid, int *b
return CRKuselectholplBounds_@1(vid, bid, low, high, &lin, &rin,
&isIdleQuery);
}
+str
+CRKsumholplBounds_@1(int *vid, int *bid, @1 *low, @1 *hgh, bit *inclusiveLow,
bit *inclusiveHgh){
+ return CRKRangeSumTree_@1(vid, bid, low, hgh, inclusiveLow,
inclusiveHgh, FALSE);
+}
@
@@ -279,10 +284,9 @@ createView:
@
@= RangeSelectBody
- @1 *t0;
- unsigned long long sum = 0;
+
BAT *b,*c,*bo;
- //BAT *view;
+ BAT *view;
int m;
int *t;
int createIndex=0;
@@ -302,11 +306,11 @@ createView:
int gapL = 1;
int gapH = 1;
bit rippledDeletions = FALSE;
- struct Node *lowNode=NULL, *hghNode=NULL, *lowNodeNext=NULL, *temp,
*stopNode=NULL;
+ struct Node *lowNode=NULL, *hghNode=NULL, *lowNodeNext=NULL, *temp;
BUN idxFirst;
int firstRetry=0;
struct timeval tv0, tv1;
- double wt=0, ct=0, st=0;
+ double wt=0, ct=0;
bit copy=TRUE;
int countBatElements=0;
int L1=0; /*Number of elements that can fit into L1 cache (size:
32KB)*/
@@ -314,7 +318,6 @@ createView:
char outputFilename1[] =
"/export/scratch2/petraki/experiments_1st_paper/experiments/stochastic/idle_time_2/pieces_holistic.txt";*/
FrequencyNode* FN;
FrequencyNode *FrequencyStructA = getFrequencyStruct('A');
- (void) tail;
gettimeofday(&tv0,0);
@@ -683,14 +686,9 @@ createView:
tempcreateView:;
_______________________________________________
checkin-list mailing list
[email protected]
http://mail.monetdb.org/mailman/listinfo/checkin-list