Changeset: c11e42794ca6 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=c11e42794ca6
Added Files:
monetdb5/extras/crackers/crackers_holistic.mal
Modified Files:
monetdb5/extras/crackers/60_crackers.mal
monetdb5/extras/crackers/Makefile.ag
monetdb5/extras/crackers/crackers.mx
monetdb5/extras/crackers/crackers_AVL_tree.mx
monetdb5/extras/crackers/crackers_holistic.c
monetdb5/extras/crackers/crackers_holistic.h
monetdb5/extras/crackers/crackers_select_ops.mx
monetdb5/extras/crackers/crackers_selecthol_ops.mx
monetdb5/extras/crackers/opt_selcrackhol.mx
Branch: holindex
Log Message:
New implementation of holistic indexing.
The new functionality searches the bat_id with the maximum weight in the list.
Then, it refines the respective index with a selection on two random values.
diffs (truncated from 446 to 300 lines):
diff --git a/monetdb5/extras/crackers/60_crackers.mal
b/monetdb5/extras/crackers/60_crackers.mal
--- a/monetdb5/extras/crackers/60_crackers.mal
+++ b/monetdb5/extras/crackers/60_crackers.mal
@@ -21,4 +21,5 @@ include opt_selcrack;
include opt_selcrackst;
include opt_selcrackhol;
include crackers;
+include crackers_holistic;
diff --git a/monetdb5/extras/crackers/Makefile.ag
b/monetdb5/extras/crackers/Makefile.ag
--- a/monetdb5/extras/crackers/Makefile.ag
+++ b/monetdb5/extras/crackers/Makefile.ag
@@ -21,6 +21,7 @@ INCLUDES = ../../modules/atoms \
../../optimizer \
../../../common/options \
../../../common/stream \
+ ../../../common/utils \
../../../gdk
MTSAFE
@@ -45,6 +46,7 @@ lib_crackers = {
LIBS = ../../tools/libmonetdb5 \
../../../gdk/libbat \
../../../common/stream/libstream \
+ ../../../common/utils/libmutils \
$(MALLOC_LIBS)
}
@@ -54,7 +56,8 @@ headers_mal = {
SOURCES = crackers.mx \
opt_selcrack.mx \
opt_selcrackst.mx \
- opt_selcrackhol.mx
+ opt_selcrackhol.mx \
+ crackers_holistic.mal
}
headers_crackersautoload = {
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
@@ -152,11 +152,8 @@ module crackers;
@:TypeSwitch_1(Select)@
@:TypeSwitch_1(Index)@
@:TypeSwitch_1(CoreUnordered)@
+#
-
-
-
-#
@= Select
command select(b:bat[:oid,:@2],l:@2,h:@2):bat[:oid,:@2]
address CRKselect_@2
@@ -281,9 +278,6 @@ comment "Retrieve the subset using a cra
index producing preferably a BATview.";
@
-command initFrequencyStruct(b:bat[:any,:any]):void
-address CRKinitFrequencyStruct
-comment "Initialize the struct(lifo) with zero values.";
@= Index
command printCrackerIndexBATpart(b:bat[:any_1,:@2]):void
@@ -349,7 +343,6 @@ comment "Break a BAT into three pieces w
#ifdef LIBCRACKERS
extern int maxCrackMap;
extern CrackerIndexNode *CrackerIndex;
-extern FrequencyNode *FrequencyStruct;
extern int IndexEntries;
extern int IndexSize;
extern int IndexStop;
@@ -371,7 +364,6 @@ extern struct storageManagement *Storage
int maxCrackMap = 0;
CrackerIndexNode *CrackerIndex;
-FrequencyNode *FrequencyStruct;
struct storageManagement *StorageInfo = NULL;
diff --git a/monetdb5/extras/crackers/crackers_AVL_tree.mx
b/monetdb5/extras/crackers/crackers_AVL_tree.mx
--- a/monetdb5/extras/crackers/crackers_AVL_tree.mx
+++ b/monetdb5/extras/crackers/crackers_AVL_tree.mx
@@ -752,7 +752,10 @@ InsertTree_@1(int m, oid indexPosition,
current =
DoubleRotateRight(&(CrackerIndex[m].Tree), current);
}
}else
- if (@2_EQ(&value,curValue,@3@1) ){ fprintf(stderr,"\nNODE ALREADY
EXISTS\n"); return current;}
+ if (@2_EQ(&value,curValue,@3@1) ){
+ /*fprintf(stderr,"\nNODE ALREADY EXISTS\n");*/
+ return current;
+ }
end:;
diff --git a/monetdb5/extras/crackers/crackers_holistic.c
b/monetdb5/extras/crackers/crackers_holistic.c
--- a/monetdb5/extras/crackers/crackers_holistic.c
+++ b/monetdb5/extras/crackers/crackers_holistic.c
@@ -1,29 +1,39 @@
#include "monetdb_config.h"
#include "crackers_holistic.h"
+#include "crackers.h"
#include "gdk.h"
+#include "mal_exception.h"
+#include "mutils.h"
+static FrequencyNode *_InternalFrequencyStruct = NULL;
+static MT_Lock frequencylock;
-int
-existsFrequencyStruct(FrequencyNode* head)
+str
+CRKinitHolistic(int *ret)
{
- if(head == NULL)
- return 0;
- else
- return 1;
+ MT_lock_init(&frequencylock, "FrequencyStruct");
+ *ret = 0;
+ return MAL_SUCCEED;
}
-FrequencyNode*
-createFrequencyStruct(void)
+
+FrequencyNode *
+getFrequencyStruct(void)
{
- FrequencyNode *x;
- x=(FrequencyNode *) GDKmalloc(sizeof(FrequencyNode));
- x->bid=0;
- x->c=0;
- x->f1=0;
- x->f2=0;
- x->weight=0.0;
- x->next=NULL;
- return x;
+ mal_set_lock(frequencylock, "getFrequencyStruct");
+ if (_InternalFrequencyStruct == NULL) {
+ _InternalFrequencyStruct = GDKmalloc(sizeof(FrequencyNode));
+ _InternalFrequencyStruct->bid=0;
+ _InternalFrequencyStruct->c=0;
+ _InternalFrequencyStruct->f1=0;
+ _InternalFrequencyStruct->f2=0;
+ _InternalFrequencyStruct->weight=0.0;
+ _InternalFrequencyStruct->next=NULL;
+ }
+ mal_unset_lock(frequencylock, "getFrequencyStruct");
+
+ return _InternalFrequencyStruct;
}
+
FrequencyNode*
push(int bat_id,FrequencyNode* head)
{
@@ -99,9 +109,60 @@ changeWeight(FrequencyNode* node,int N,i
p = 2 * (node->c);
Sp =((double)N)/p;
d = ABS(Sp - L1);
- fprintf(stderr,"p=%d Sp=%lf d=%lf\n",p,Sp,d);
- node->weight = ((node->f2)/(node->f1)) * d;
- fprintf(stderr,"W=%lf\n",node->weight);
+ /*fprintf(stderr,"p=%d Sp=%lf d=%lf\n",p,Sp,d);*/
+ if (node->f2!=0)
+ node->weight = ((double)(node->f1)/(double)(node->f2)) * d;
+ /*fprintf(stderr,"W=%lf\n",node->weight);*/
return node->weight;
}
+
+str
+CRKinitFrequencyStruct(int *vid,int *bid)
+{
+ FrequencyNode* new_node;
+ FrequencyNode *fs = getFrequencyStruct();
+
+ /*fprintf(stderr,"BAT_ID=%d\n",*bid);*/
+
+ new_node=push(*bid,fs);
+ fprintf(stderr,"Bid=%d c=%d f1=%d f2=%d weight=%lf
\n",new_node->bid,new_node->c,new_node->f1,new_node->f2,new_node->weight);
+
+ *vid = 0;
+ return MAL_SUCCEED;
+}
+
+str
+CRKrandomCrack(int *ret)
+{
+ int bid=0;
+ BAT *b;
+ int low=0, hgh=0;
+ int *t;
+ int temp=0;
+ oid posl,posh,p;
+ bit inclusive=TRUE;
+ FrequencyNode *fs = getFrequencyStruct();
+
+ bid=findMax(fs);
+ b=BATdescriptor(bid);
+ t=(int*)Tloc(b,BUNfirst(b));
+ posl=BUNfirst(b);
+ posh=BUNlast(b) - 1;
+ p=(rand()%(posh-posl+1))+posl;
+ low=t[p];
+ p=(rand()%(posh-posl+1))+posl;
+ hgh=t[p];
+ if(hgh < low)
+ {
+ temp=low;
+ low=hgh;
+ hgh=temp;
+ }
+ /*fprintf(stderr,"posl = "OIDFMT" posh = "OIDFMT" low = %d hgh = %d
inclusive = %d", posl,posh,low,hgh,inclusive );*/
+
+ CRKselectholBounds_int(ret, &bid, &low, &hgh, &inclusive, &inclusive);
+ *ret = 0;
+ return MAL_SUCCEED;
+}
+
diff --git a/monetdb5/extras/crackers/crackers_holistic.h
b/monetdb5/extras/crackers/crackers_holistic.h
--- a/monetdb5/extras/crackers/crackers_holistic.h
+++ b/monetdb5/extras/crackers/crackers_holistic.h
@@ -1,16 +1,17 @@
#ifndef _CRACKERS_HOLISTIC_H_
#define _CRACKERS_HOLISTIC_H_
+#include <mal.h>
#ifdef WIN32
#ifndef LIBCRACKERS
-#define holistic_export extern __declspec(dllimport)
+#define crackers_export extern __declspec(dllimport)
#else
-#define holistic_export extern __declspec(dllexport)
+#define crackers_export extern __declspec(dllexport)
#endif
#else
-#define holistic_export extern
+#define crackers_export extern
#endif
@@ -25,13 +26,16 @@ typedef struct frequency{
}FrequencyNode;
-holistic_export int existsFrequencyStruct(FrequencyNode* head);
-holistic_export FrequencyNode* createFrequencyStruct(void);
-holistic_export FrequencyNode* push(int bat_id,FrequencyNode* head);
-holistic_export FrequencyNode* pop(FrequencyNode* head);
-holistic_export void printFrequencyStruct(FrequencyNode* head);
-holistic_export FrequencyNode* searchBAT(FrequencyNode* head,int bat_id);
-holistic_export double changeWeight(FrequencyNode* node,int N,int L1);
-holistic_export int findMax(FrequencyNode* head);
+crackers_export FrequencyNode *getFrequencyStruct(void);
+crackers_export FrequencyNode* push(int bat_id,FrequencyNode* head);
+crackers_export FrequencyNode* pop(FrequencyNode* head);
+crackers_export void printFrequencyStruct(FrequencyNode* head);
+crackers_export FrequencyNode* searchBAT(FrequencyNode* head,int bat_id);
+crackers_export double changeWeight(FrequencyNode* node,int N,int L1);
+crackers_export int findMax(FrequencyNode* head);
+
+crackers_export str CRKinitHolistic(int *ret);
+crackers_export str CRKinitFrequencyStruct(int *vid,int *bid);
+crackers_export str CRKrandomCrack(int *ret);
#endif /*crackers_holistic*/
diff --git a/monetdb5/extras/crackers/crackers_holistic.mal
b/monetdb5/extras/crackers/crackers_holistic.mal
new file mode 100644
--- /dev/null
+++ b/monetdb5/extras/crackers/crackers_holistic.mal
@@ -0,0 +1,15 @@
+module crackers;
+
+command holisticprelude():void
+address CRKinitHolistic
+comment "Initialize holistic module";
+
+command initFrequencyStruct(b:bat[:oid,:any]):void
+address CRKinitFrequencyStruct
+comment "Initialize the struct(lifo) with zero values.";
+
+command randomCrack():void
+address CRKrandomCrack
+comment "Do random crack on BATs ordered by descending weight";
+
+crackers.holisticprelude();
diff --git a/monetdb5/extras/crackers/crackers_select_ops.mx
b/monetdb5/extras/crackers/crackers_select_ops.mx
--- a/monetdb5/extras/crackers/crackers_select_ops.mx
+++ b/monetdb5/extras/crackers/crackers_select_ops.mx
@@ -74,9 +74,7 @@ crackers_export str CRKthetauselect_@1(i
#include "monetdb_config.h"
#include "crackers.h"
-/*
-#define CRACK_DEBUG 1
-*/
+/*#define CRACK_DEBUG 1*/
_______________________________________________
Checkin-list mailing list
[email protected]
http://mail.monetdb.org/mailman/listinfo/checkin-list