Changeset: 8d33f83a2f1c for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=8d33f83a2f1c
Modified Files:
        monetdb5/extras/crackers/crackers_multicore_unordered.mx
        monetdb5/extras/crackers/crackers_parallelselect_ops.mx
Branch: holindex
Log Message:

Fix errors in multicore crackTwo algorithm.


diffs (211 lines):

diff --git a/monetdb5/extras/crackers/crackers_multicore_unordered.mx 
b/monetdb5/extras/crackers/crackers_multicore_unordered.mx
--- a/monetdb5/extras/crackers/crackers_multicore_unordered.mx
+++ b/monetdb5/extras/crackers/crackers_multicore_unordered.mx
@@ -46,17 +46,19 @@ All Rights Reserved.
 typedef struct {
         BAT *array;
         int *temp_array;
+       oid *temp_array_oid;
         int *data_less;
         int *data_greater;
         oid left;
         oid right;
         int tid;
-        int *pivot;
+        int pivot;
 } thread_data_t;
 
 typedef struct {
         BAT *array;
         int *temp_array;
+       oid *temp_array_oid;
         int *data_less;
         int *data_greater;
         int nthreads; /*number of threads*/
@@ -64,7 +66,7 @@ typedef struct {
         oid left;
         oid right;
         int tid;
-        int *pivot;
+        int pivot;
 } thread_data_new_t;
 
 
@@ -94,8 +96,8 @@ crackers_export str CRKcrackUnorderedThr
 @
 @= crackInTwoUnorderedPieces_decl
 str CRKcrackUnorderedZeroParallel_@2_@1( BAT *b, @1 mval, oid first, oid last, 
oid *pos);
-str CRKscanUnorderedZeroParallel_@2_@1( BAT *b, @1 *temp_array, @1 *mval, oid 
first, oid last, int nthreads, int *data_less, int *data_greater);
-str CRKreorganizeUnorderedZeroParallel_@2_@1( BAT *b, @1 *temp_array, @1 
*mval, oid first, oid last, int nthreads, int *data_less, int *data_greater);
+str CRKscanUnorderedZeroParallel_@2_@1( BAT *b, @1 *temp_array, oid 
*temp_array_oid, @1 mval, oid first, oid last, int nthreads, int *data_less, 
int *data_greater);
+str CRKreorganizeUnorderedZeroParallel_@2_@1( BAT *b, @1 *temp_array, oid 
*temp_arra_oid, @1 mval, oid first, oid last, int nthreads, int *data_less, int 
*data_greater);
 void *threadFuncScan_@2_@1(void *arg);
 void *threadFuncReorganize_@2_@1(void *arg);
 @
@@ -220,8 +222,8 @@ CRKcrackUnorderedZeroParallel_@2_@1( BAT
 }
 
 str
-CRKscanUnorderedZeroParallel_@2_@1(BAT *b, @1 *temp_array, @1 *mval, oid 
first, oid last, int nthreads, int *data_less, int *data_greater){
-
+CRKscanUnorderedZeroParallel_@2_@1(BAT *b, @1 *temp_array, oid 
*temp_array_oid, @1 mval, oid first, oid last, int nthreads, int *data_less, 
int *data_greater)
+{
        int i;
        oid partition_elements;
         thread_data_t *data;
@@ -237,6 +239,7 @@ CRKscanUnorderedZeroParallel_@2_@1(BAT *
         for (i = 0; i < nthreads; i++) {
                data[i].array = b;
                 data[i].temp_array = temp_array;
+               data[i].temp_array_oid = temp_array_oid;
                 data[i].data_less = data_less;
                 data[i].data_greater = data_greater;
                 data[i].left = first + i*partition_elements;
@@ -271,7 +274,7 @@ CRKscanUnorderedZeroParallel_@2_@1(BAT *
        return MAL_SUCCEED;
 }
 str 
-CRKreorganizeUnorderedZeroParallel_@2_@1(BAT *b, @1 *temp_array, @1 *mval, oid 
first, oid last, int nthreads,int *data_less, int* data_greater) {
+CRKreorganizeUnorderedZeroParallel_@2_@1(BAT *b, @1 *temp_array, oid 
*temp_array_oid, @1 mval, oid first, oid last, int nthreads,int *data_less, 
int* data_greater) {
 
        int i;
        oid partition_elements;
@@ -287,12 +290,13 @@ CRKreorganizeUnorderedZeroParallel_@2_@1
        data = malloc (nthreads * sizeof(thread_data_new_t));
 
        /* Now create the threads. */
-       partition_elements=((last-first)+1)/nthreads;
+       partition_elements=(last-first+1)/nthreads;
         //printf("Each partition consists of %d elements 
(almost).\n",partition_elements);     
        for (i = 0; i < nthreads; i++) {
 
                data[i].array = b;
                data[i].temp_array = temp_array; 
+               data[i].temp_array_oid = temp_array_oid;
                data[i].data_less = data_less;
                data[i].data_greater = data_greater;    
                data[i].n = last-first+1;
@@ -341,12 +345,12 @@ void
         fh = (oid*)Hloc(my_data->array, BUNfirst(my_data->array) + 
my_data->left);
         lh = (oid*)Hloc(my_data->array, BUNfirst(my_data->array) + 
my_data->right);
 
-        while(fh<lh) {
-                if (@5_@3(ft, my_data->pivot,@6@1)){
-                       my_data->data_greater[my_data->tid]++;
+        while(fh<=lh) {
+                if (@5_@3(ft, &my_data->pivot,@6@1)){
+                       my_data->data_less[my_data->tid]++;
                 }
                 else {
-                       my_data->data_less[my_data->tid]++;
+                       my_data->data_greater[my_data->tid]++;
                 }
                ft++; fh++;
         }
@@ -373,14 +377,16 @@ void *threadFuncReorganize_@2_@1(void *a
        for(i=0; i < my_data->nthreads && i <= my_data->tid; i++)
                positionGreater=positionGreater - my_data->data_greater[i];
 
-       while(fh<lh) {
-                if (@5_@3(ft, my_data->pivot,@6@1)){
-                       //my_data->temp_array[positionGreater]=ft;
-                       positionGreater++;
+       while(fh<=lh) {
+                if (@5_@3(ft, &my_data->pivot,@6@1)){
+                       my_data->temp_array[positionLess]=*ft;
+                       my_data->temp_array_oid[positionLess]=*fh;
+                       positionLess++;
                }
                 else {
-                       //my_data->temp_array[positionLess]=ft;
-                        positionLess++;
+                       my_data->temp_array[positionGreater]=*ft;
+                        my_data->temp_array_oid[positionGreater]=*fh;
+                       positionGreater++;
                 }
                 ft++; fh++;
         }
diff --git a/monetdb5/extras/crackers/crackers_parallelselect_ops.mx 
b/monetdb5/extras/crackers/crackers_parallelselect_ops.mx
--- a/monetdb5/extras/crackers/crackers_parallelselect_ops.mx
+++ b/monetdb5/extras/crackers/crackers_parallelselect_ops.mx
@@ -134,13 +134,19 @@ CRKparalleluselectBounds_@1(int *vid, in
        if (*inclusiveLow == TRUE)
        {
                CRKcrackUnorderedZeroParallel@2_RE_@1(b,*low, cl1, ch1,&vl);
-               CRKscanUnorderedZeroParallel@2_RE_@1(b, p_new, low, cl1, ch1, 
nthreads, p_data_less, p_data_greater);
+               CRKscanUnorderedZeroParallel@2_RE_@1(b, p_new, p_new_oid, *low, 
cl1, ch1, nthreads, p_data_less, p_data_greater);
+               p_new=(int *)malloc((ch1-cl1) * sizeof(int));
+               p_new_oid=(oid *)malloc((ch1-cl1) * sizeof(oid));
+               CRKreorganizeUnorderedZeroParallel@2_RE_@1(b, p_new, p_new_oid, 
*low, cl1, ch1, nthreads, p_data_less, p_data_greater);
        }
        else
        {
                CRKcrackUnorderedZeroParallel@2_LE_@1(b,*low, cl1, ch1,&vl);
-               CRKscanUnorderedZeroParallel@2_LE_@1(b, p_new, low, cl1, ch1, 
nthreads, p_data_less, p_data_greater);
-        }
+               CRKscanUnorderedZeroParallel@2_LE_@1(b, p_new, p_new_oid, *low, 
cl1, ch1, nthreads, p_data_less, p_data_greater);
+               p_new=(int *)malloc((ch1-cl1) * sizeof(int));
+               p_new_oid=(oid *)malloc((ch1-cl1) * sizeof(oid));
+               CRKreorganizeUnorderedZeroParallel@2_LE_@1(b, p_new, p_new_oid, 
*low, cl1, ch1, nthreads, p_data_less, p_data_greater);
+       }
 
        if (vl < cl1){
                /*then the left piece is empty*/
@@ -160,13 +166,19 @@ CRKparalleluselectBounds_@1(int *vid, in
        if (*inclusiveHgh == TRUE)
        {
                CRKcrackUnorderedZeroParallel@2_LE_@1(b,*hgh, cl2, ch2,&vh);
-               CRKscanUnorderedZeroParallel@2_LE_@1(b, p_new, hgh, cl2, ch2, 
nthreads, p_data_less, p_data_greater);
+               CRKscanUnorderedZeroParallel@2_LE_@1(b, p_new, p_new_oid, *hgh, 
cl2, ch2, nthreads, p_data_less, p_data_greater);
+               p_new=(int *)malloc((ch2-cl2) * sizeof(int));
+               p_new_oid=(oid *)malloc((ch2-cl2) * sizeof(oid));
+               CRKreorganizeUnorderedZeroParallel@2_LE_@1(b, p_new, p_new_oid, 
*hgh, cl2, ch2, nthreads, p_data_less, p_data_greater);
         }
        else
        {
                CRKcrackUnorderedZeroParallel@2_RE_@1(b,*hgh, cl2, ch2,&vh);
-               CRKscanUnorderedZeroParallel@2_RE_@1(b, p_new, hgh, cl2, ch2, 
nthreads, p_data_less, p_data_greater);
-        }
+               CRKscanUnorderedZeroParallel@2_RE_@1(b, p_new, p_new_oid, *hgh, 
cl2, ch2, nthreads, p_data_less, p_data_greater);
+               p_new=(int *)malloc((ch2-cl2) * sizeof(int));
+               p_new_oid=(oid *)malloc((ch2-cl2) * sizeof(oid));
+               CRKreorganizeUnorderedZeroParallel@2_RE_@1(b, p_new, p_new_oid, 
*hgh, cl2, ch2, nthreads, p_data_less, p_data_greater);
+       }
 
        /*check for gaps*/
        if (vh < cl2)
@@ -217,6 +229,7 @@ createView:
        bit copy=TRUE;
 
        int *p_new = NULL;
+       oid *p_new_oid = NULL;
        int *p_data_less = NULL;
        int *p_data_greater = NULL;
        int nthreads=2;
@@ -224,8 +237,8 @@ createView:
 
        int pieces=0;
        
-       p_data_less=(int *)malloc(nthreads * sizeof(int));
-       p_data_greater=(int *)malloc(nthreads * sizeof(int));
+       p_data_less=GDKzalloc(nthreads * sizeof(int));
+       p_data_greater=GDKzalloc(nthreads * sizeof(int));
 
 
        /*FILE *ofp;
@@ -846,6 +859,7 @@ CRKRangeLeftNilTree_@1(int *vid, int *bi
        int gapH = 1;
 
        int *p_new = NULL;
+       oid *p_new_oid = NULL;
         int *p_data_less = NULL;
         int *p_data_greater = NULL;
         int nthreads=2;
@@ -954,6 +968,7 @@ CRKRangeRightNilTree_@1(int *vid, int *b
        bit LBound=FALSE;
 
        int *p_new = NULL;
+       oid *p_new_oid = NULL;
         int *p_data_less = NULL;
         int *p_data_greater = NULL;
         int nthreads=2;
_______________________________________________
checkin-list mailing list
[email protected]
http://mail.monetdb.org/mailman/listinfo/checkin-list

Reply via email to