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

Reply via email to