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