Changeset: f883ebdc8c31 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=f883ebdc8c31
Modified Files:
        monetdb5/extras/crackers/crackers_holistic.c
        monetdb5/extras/crackers/crackers_holistic.h
        monetdb5/extras/crackers/crackers_selectholpl_ops.mx
        monetdb5/extras/crackers/crackers_selectpl_ops.mx
Branch: holindex
Log Message:

Use an array of locks insted of a global lock.


diffs (truncated from 488 to 300 lines):

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
@@ -29,7 +29,7 @@ static FrequencyNode *_InternalFrequency
 static MT_Id *idletime_thread;
 static MT_Id *cpuload_thread;
 MT_Lock frequencylock;
-MT_Lock CRKIndexLock;
+MT_Lock CRKIndexLock[LOCKS];
 pthread_rwlock_t CRKFirstPieceRWLock;
 IdleFuncPtr IdleFunc;
 
@@ -38,6 +38,7 @@ CRKinitHolistic(int *ret)
 {
        char *p = getenv("MOTIVATION_EXPERIMENT");
        int motivation_experiment=0;
+       int i=0;
 
        if (p == NULL){
                fprintf(stderr, "Error initHolistic: environment variable is 
missing.\n");
@@ -50,7 +51,8 @@ CRKinitHolistic(int *ret)
        idletime_thread = GDKzalloc(sizeof(*idletime_thread));
        cpuload_thread = GDKzalloc(sizeof(*idletime_thread));
        MT_lock_init(&frequencylock, "FrequencyStruct");
-       MT_lock_init(&CRKIndexLock, "Cracker Index Lock");
+       for (i=0;i<LOCKS;i++)
+               MT_lock_init(&CRKIndexLock[i], "Cracker Index Lock");
        MT_create_thread(idletime_thread,(void (*)(void *))HeartbeatCPUload, 
IdleFunc, MT_THR_JOINABLE);
        if (motivation_experiment != 0)
                MT_create_thread(cpuload_thread,(void (*)(void 
*))HeartbeatCPUload_total, NULL, MT_THR_JOINABLE);
@@ -428,7 +430,7 @@ CRKrandomCrackUpdates(int *ret)
         oid posl,posh,p;
         bit inclusive=TRUE;
         FrequencyNode *fs = getFrequencyStruct('A');
-        max_node=findMax(fs);
+        max_node=pickRandom(fs);
         if(max_node!=NULL && max_node->weight > 0)
         {
 bid=max_node->bid;
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
@@ -23,6 +23,8 @@
 #include "mal.h"
 #include "mal_client.h"
 
+#define LOCKS 64
+
 typedef struct frequency{
 
        int             bid;            /* The base BAT */
@@ -37,7 +39,7 @@ typedef struct frequency{
 
 typedef  str (*IdleFuncPtr)(int *);
 crackers_export MT_Lock frequencylock;
-crackers_export MT_Lock CRKIndexLock;
+crackers_export MT_Lock CRKIndexLock[LOCKS];
 crackers_export pthread_rwlock_t CRKFirstPieceRWLock;
 
 crackers_export FrequencyNode *getFrequencyStruct(char which);
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
@@ -209,6 +209,7 @@ CRKrandomholpl_@1(int *bid, bit *inclusi
        int retryIter=0;
        int incr_pieces=0;
        int L1=0; /*Number of elements that can fit into L1 cache (size: 
32KB)*/        
+       int mod_bid=0;
        FILE *ofp;
        char *outputFilename1;
        FrequencyNode* FN;
@@ -231,8 +232,10 @@ CRKrandomholpl_@1(int *bid, bit *inclusi
        low=(@1*) GDKmalloc(sizeof(@1));
        if (low==NULL)
                return -2;
+       
+       mod_bid=ABS(*bid)%LOCKS;
 
-       MT_lock_set(&CRKIndexLock,"Cracker Index Lock");
+       MT_lock_set(&CRKIndexLock[mod_bid],"Cracker Index Lock");
 
        //gettimeofday(&tv1,0); wt+=dt(tv0,tv1); tv0=tv1;
 
@@ -297,7 +300,7 @@ CRKrandomholpl_@1(int *bid, bit *inclusi
                BBPincref(b->batCacheid,TRUE);
                BBPunfix(bo->batCacheid);
 
-               MT_lock_unset(&CRKIndexLock,"Cracker Index Lock");
+               MT_lock_unset(&CRKIndexLock[mod_bid],"Cracker Index Lock");
                //fprintf(ofp,"Idle_Query \t 0 \t Wait_time\t %9.6lf \t 
Selection_time\t %9.6lf \t Low= \t %d\n",wt,ct,(int)*low);
                GDKfree(low);
                //gettimeofday(&tv1,0); ct+=dt(tv0,tv1); tv0=tv1;
@@ -314,7 +317,7 @@ CRKrandomholpl_@1(int *bid, bit *inclusi
 
        idxFirst = BUNfirst(c);
 
-       MT_lock_unset(&CRKIndexLock,"Cracker Index Lock");
+       MT_lock_unset(&CRKIndexLock[mod_bid],"Cracker Index Lock");
 
        //gettimeofday(&tv1,0); ct+=dt(tv0,tv1); tv0=tv1;
        
@@ -497,7 +500,7 @@ createView:
 
        if (createIndex==1)
        {
-               MT_lock_unset(&CRKIndexLock,"Cracker Index Lock");
+               MT_lock_unset(&CRKIndexLock[mod_bid],"Cracker Index Lock");
                createIndex=0;  
        }
 
@@ -533,6 +536,7 @@ createView:
        bit copy=TRUE;  
        int countBatElements=0;
        int L1=0; /*Number of elements that can fit into L1 cache (size: 
32KB)*/        
+       int mod_bid=0;
        FILE *ofp;
        char *outputFilename1;
        FrequencyNode* FN;
@@ -554,8 +558,9 @@ createView:
                exit(1);
        }
 
+       mod_bid=ABS(*bid)%LOCKS;
 
-       MT_lock_set(&CRKIndexLock,"Cracker Index Lock");
+       MT_lock_set(&CRKIndexLock[mod_bid],"Cracker Index Lock");
 
        //gettimeofday(&tv1,0); wt+=dt(tv0,tv1); tv0=tv1;
 
@@ -743,7 +748,7 @@ createView:
        }
                
 
-       MT_lock_unset(&CRKIndexLock,"Cracker Index Lock");
+       MT_lock_unset(&CRKIndexLock[mod_bid],"Cracker Index Lock");
 
        //gettimeofday(&tv1,0); ct+=dt(tv0,tv1); tv0=tv1;
        
@@ -938,7 +943,7 @@ createView:
 
        if (createIndex==1)
        {
-               MT_lock_unset(&CRKIndexLock,"Cracker Index Lock");
+               MT_lock_unset(&CRKIndexLock[mod_bid],"Cracker Index Lock");
                createIndex=0;  
        }
 
@@ -1371,6 +1376,7 @@ CRKRangeLeftNilTree_@1(int *vid, int *bi
        BUN idxFirst = BUN_NONE;
        int incr_pieces=0;
        int L1=0;
+       int mod_bid=0;
        int countBatElements=0;
        FrequencyNode* FN;
        FrequencyNode *FrequencyStructA = getFrequencyStruct('A');
@@ -1393,8 +1399,10 @@ CRKRangeLeftNilTree_@1(int *vid, int *bi
        }
 
        L1=32000/ATOMsize(TYPE_@1);
+       
+       mod_bid=ABS(*bid)%LOCKS;
 
-        MT_lock_set(&CRKIndexLock,"Cracker Index Lock");
+        MT_lock_set(&CRKIndexLock[mod_bid],"Cracker Index Lock");
 
        if (*inclusiveHgh == TRUE) HBound = FALSE;
        else    HBound = TRUE;                          
@@ -1479,7 +1487,7 @@ CRKRangeLeftNilTree_@1(int *vid, int *bi
 
        idxFirst = BUNfirst(c);
 
-       MT_lock_unset(&CRKIndexLock,"Cracker Index Lock");
+       MT_lock_unset(&CRKIndexLock[mod_bid],"Cracker Index Lock");
 
        vl = BUNfirst(b);
 
@@ -1553,7 +1561,7 @@ CRKRangeLeftNilTree_@1(int *vid, int *bi
 
         if (createIndex==1)
         {
-                MT_lock_unset(&CRKIndexLock,"Cracker Index Lock");
+                MT_lock_unset(&CRKIndexLock[mod_bid],"Cracker Index Lock");
                 createIndex=0;
         }
 
@@ -1576,6 +1584,7 @@ CRKRangeRightNilTree_@1(int *vid, int *b
         BUN idxFirst = BUN_NONE;
        int incr_pieces=0;
        int L1=0;
+       int mod_bid=0;
        int countBatElements;
        FrequencyNode* FN;
        FrequencyNode *FrequencyStructA = getFrequencyStruct('A');
@@ -1599,7 +1608,9 @@ CRKRangeRightNilTree_@1(int *vid, int *b
 
        L1=32000/ATOMsize(TYPE_@1);
 
-        MT_lock_set(&CRKIndexLock,"Cracker Index Lock");
+       mod_bid=ABS(*bid)%LOCKS;
+
+        MT_lock_set(&CRKIndexLock[mod_bid],"Cracker Index Lock");
 
        m = existsCrackerIndex(*bid);
 
@@ -1681,7 +1692,7 @@ CRKRangeRightNilTree_@1(int *vid, int *b
 
        idxFirst = BUNfirst(c);
 
-       MT_lock_unset(&CRKIndexLock,"Cracker Index Lock");
+       MT_lock_unset(&CRKIndexLock[mod_bid],"Cracker Index Lock");
 
        vh = BUNlast(b)-(oid)1;
 
@@ -1764,7 +1775,7 @@ CRKRangeRightNilTree_@1(int *vid, int *b
 
         if (createIndex==1)
         {
-                MT_lock_unset(&CRKIndexLock,"Cracker Index Lock");
+                MT_lock_unset(&CRKIndexLock[mod_bid],"Cracker Index Lock");
                 createIndex=0;
         }
 
diff --git a/monetdb5/extras/crackers/crackers_selectpl_ops.mx 
b/monetdb5/extras/crackers/crackers_selectpl_ops.mx
--- a/monetdb5/extras/crackers/crackers_selectpl_ops.mx
+++ b/monetdb5/extras/crackers/crackers_selectpl_ops.mx
@@ -272,7 +272,7 @@ createView:
 
        if (createIndex==1)
        {
-               MT_lock_unset(&CRKIndexLock,"Cracker Index Lock");
+               MT_lock_unset(&CRKIndexLock[mod_bid],"Cracker Index Lock");
                createIndex=0;  
        }
 
@@ -305,24 +305,12 @@ createView:
        //struct timeval tv0, tv1;
        //double wt=0, ct=0;
        bit copy=TRUE;  
-       FILE *ofp,*file;
+       FILE *ofp;
        char *outputFilename1;
-       char filename[150];
-       lng t0 = GDKusec();
-
+       int mod_bid=0;
 
        //gettimeofday(&tv0,0);
 
-       snprintf (filename, sizeof(filename), 
"/export/scratch2/petraki/experiments_paper1/concurrency/multiple_clients/select/client8/%d.txt",
 getpid());
-
-       file = fopen(filename,"a");
-       if (file == NULL) {
-               fprintf(stderr, "Can't open thread file!\n");
-               exit(1);
-       }
-       fprintf(file,"timestamp=\t" LLFMT "\t0\n",t0);
-       fprintf(file,"timestamp=\t" LLFMT "\t2\n",t0);
-
        outputFilename1 = getenv("SELECT_PL");
        if (outputFilename1 == NULL){
                fprintf(stderr, "Error: SELECT_PL\n");
@@ -334,19 +322,12 @@ createView:
                fprintf(stderr, "Can't open output file!\n");
                exit(1);
        }
+       
+       mod_bid=ABS(*bid)%LOCKS;
 
-
-       t0 = GDKusec();
-       fprintf(file,"timestamp=\t" LLFMT "\t2\n",t0);
-       fprintf(file,"timestamp=\t" LLFMT "\t1\n",t0);
-
-       MT_lock_set(&CRKIndexLock,"Cracker Index Lock");
+       MT_lock_set(&CRKIndexLock[mod_bid],"Cracker Index Lock");
 
        //gettimeofday(&tv1,0); wt+=dt(tv0,tv1); tv0=tv1;
-       t0 = GDKusec();
-       fprintf(file,"timestamp=\t" LLFMT "\t1\n",t0);
-       fprintf(file,"timestamp=\t" LLFMT "\t2\n",t0);
-
 
        /*if (@2_GT(low,hgh,@3@1))
                throw(MAL, "crackers.crack", "illegal range");*/
@@ -519,23 +500,13 @@ createView:
        }
                
 
-       MT_lock_unset(&CRKIndexLock,"Cracker Index Lock");
-       t0 = GDKusec();
-       fprintf(file,"timestamp=\t" LLFMT "\t1\n",t0);
-       fprintf(file,"timestamp=\t" LLFMT "\t2\n",t0);
+       MT_lock_unset(&CRKIndexLock[mod_bid],"Cracker Index Lock");
+       //gettimeofday(&tv1,0); ct+=dt(tv0,tv1); tv0=tv1;
 
-       //gettimeofday(&tv1,0); ct+=dt(tv0,tv1); tv0=tv1;
        retry:;
-       t0 = GDKusec();
-       fprintf(file,"timestamp=\t" LLFMT "\t2\n",t0);
-       fprintf(file,"timestamp=\t" LLFMT "\t1\n",t0);
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to