Changeset: 7438a45a7e09 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=7438a45a7e09
Modified Files:
        monetdb5/extras/bwd/cl_program_utilities.c
        monetdb5/extras/bwd/operations.c
        monetdb5/extras/bwd/utilities.c
Branch: bwd
Log Message:

* fixed some the grouping kernel and varchar(1) decomposition
* tpch q1 runs through now but doesn't produce a proper result output (I think 
that's because th stringheap of the grouping attributes isn't propagate, I'll 
have to ask someone how to best propagate it)


Unterschiede (167 Zeilen):

diff --git a/monetdb5/extras/bwd/cl_program_utilities.c 
b/monetdb5/extras/bwd/cl_program_utilities.c
--- a/monetdb5/extras/bwd/cl_program_utilities.c
+++ b/monetdb5/extras/bwd/cl_program_utilities.c
@@ -284,15 +284,17 @@ cl_program getTwoAttributeGroupProgram(u
                "\n"
                "    size_t secondSlot = 
(inputIndex*secondApproximationBits)/targetTypeBits;\n"
                "    size_t secondOffset = 
(inputIndex*secondApproximationBits)%targetTypeBits;\n"
-               "    __global const unsigned int* secondVals = 
&(firstInputTail[2]);\n"
+               "    __global const unsigned int* secondVals = 
&(secondInputTail[2]);\n"
                "    const unsigned int secondDelta = (("
                "      
(((secondOffset+secondApproximationBits)>targetTypeBits)?(((secondVals[secondSlot]<<(secondApproximationBits-targetTypeBits+secondOffset))
 + 
(secondVals[secondSlot+1]>>(targetTypeBits-(secondApproximationBits-targetTypeBits+secondOffset))))&secondApproximationMask):0)\n"
                "    + 
(((secondOffset+secondApproximationBits)<=targetTypeBits)*(secondVals[secondSlot]>>(targetTypeBits-secondOffset-secondApproximationBits)))\n"
                "      )&secondApproximationMask);\n"
                "\n"
-               "  const unsigned int delta = 
firstDelta<<firstApproximationBits + secondDelta;"
-               "  const uint oldValue = atomic_cmpxchg(histogramOIDs + delta + 
2, 0, inputIndex);\n"
-               "  const uint groupID = oldValue?oldValue:inputIndex;\n"
+               "  const unsigned int delta = 
(firstDelta<<secondApproximationBits) + secondDelta;"
+               "  const uint oldValue = atomic_cmpxchg(histogramOIDs + delta + 
2, 0, inputIndex+1);\n"
+               "  const uint groupID = oldValue?oldValue:(inputIndex+1);\n"
+               "  if(groupID==inputIndex+1)"
+               "    printf(\"delta: %u (%u<<%u + %u), group: %u\\n\", delta, 
firstDelta, secondApproximationBits, secondDelta, groupID);"
                "  groupIDs[inputIndex+2] = groupID;\n"
                "  atomic_inc(histogramCounts+delta+2);\n"
                " }\n"
@@ -327,10 +329,10 @@ cl_program getHistogramCompactionProgram
                "__global unsigned int* newHistogramCounts\n"
                ") {\n"
                "  const size_t inputIndex = get_global_id(0);\n"
-               "  if(oldHistogramCounts[inputIndex] > 0){"
+               "  if(oldHistogramCounts[inputIndex+2] > 0){"
                "    atomic_inc(newHistogramCounts);"
                "    const unsigned int newSlot = atomic_inc(newHistogramOIDs);"
-               "    newHistogramOIDs[newSlot+2] = 
oldHistogramOIDs[inputIndex+2];"
+               "    newHistogramOIDs[newSlot+2] = 
oldHistogramOIDs[inputIndex+2]-1;"
                "    newHistogramCounts[newSlot+2] = 
oldHistogramCounts[inputIndex+2];"
                "  }"
                "}\n";
diff --git a/monetdb5/extras/bwd/operations.c b/monetdb5/extras/bwd/operations.c
--- a/monetdb5/extras/bwd/operations.c
+++ b/monetdb5/extras/bwd/operations.c
@@ -1187,13 +1187,7 @@ str BWDBatMULsignalApproximate(bat *ret,
 extern str CMDbatMULsignal(bat *ret, bat *bid1, bat *bid2);
 
 str BWDBatMULsignalRefine(bat *ret, bat *bid1, bat *bid2, bat *approx){
-       //TODO: implement me (easy)
-       BAT *left = BATdescriptor(*bid2);
-       BAT* result = BATnew(TYPE_void, BATttype(left), 0);
-       BBPreleaseref(left->batCacheid);
-       BBPkeepref(*ret = result->batCacheid);
-       return MAL_SUCCEED;
-//     CMDbatMULsignal(ret, bid1, bid2);
+       return CMDbatMULsignal(ret, bid1, bid2);
 }
 
 str BWDSelectNotNilApproximate(int *result, int *bid){
@@ -1203,10 +1197,11 @@ str BWDSelectNotNilApproximate(int *resu
 }
 
 str BWDSelectNotNilRefine(int *ret, int *bid, int *approx){
-       BAT *left = BATdescriptor(*bid);
-       BAT* result = BATnew(BAThtype(left), BATttype(left), 0);
-       BBPkeepref(*ret = result->batCacheid);
-       BBPreleaseref(left->batCacheid);
+       /* BAT *left = BATdescriptor(*bid); */
+       /* BAT* result = BATnew(BAThtype(left), BATttype(left), 0); */
+       /* BBPkeepref(*ret = result->batCacheid); */
+       /* BBPreleaseref(left->batCacheid); */
+       BBPincref(*ret = *bid, 1);
        return MAL_SUCCEED;
 }
 
@@ -1244,12 +1239,13 @@ str BWDGroupedSumApproximate(int *retid,
        return result;
 }
 
+str AX3aggrX3_sum3_int_int(int *retid,int *bid, int *gid, int *eid);
 str BWDGroupedSumRefine(int *retid,int *bid, int *gid, int *eid, bat* approx){
        /* BAT *left = BATdescriptor(*bid2); */
-       BAT* result = BATnew(TYPE_void, TYPE_int, 0);
+       /* BAT* result = BATnew(TYPE_void, TYPE_int, 0); */
        /* BBPreleaseref(left->batCacheid); */
-       BBPkeepref(*retid = result->batCacheid);
-
+       /* BBPkeepref(*retid = result->batCacheid); */
+       return AX3aggrX3_sum3_int_int(retid, bid, gid, eid);
        /* BBPincref(*retid = *approx, 1); */
        return MAL_SUCCEED;
 }
@@ -1537,7 +1533,7 @@ str BWDMulticolumnGroupApproximate(Clien
                                                                                
        newHead, newTail}[i]
                                                                        )))) 
printf("#%s, clSetKernelArg(%d): %s;\n", __func__, i, clError(err));
                                }
-                               if((err = 
bwdEnqueueNDRangeKernel(getCommandQueue(), compactKernel, 1, (const 
size_t[]){0}, (const size_t[]){histogramSize}, (const size_t[]){2}, 0, NULL, 
NULL)))
+                               if((err = 
bwdEnqueueNDRangeKernel(getCommandQueue(), compactKernel, 1, (const 
size_t[]){0}, (const size_t[]){histogramSize}, (const size_t[]){1}, 0, NULL, 
NULL)))
                                        printf("#%s, clEnqueueNDRangeKernel: 
%s, %s:%u;\n", __func__, clError(err), __FILE__, __LINE__);
                                if (synchronousGPU) clFinish(getCommandQueue());
                                
clReleaseMemObject(histogramSlot->tailApproximation);
@@ -1548,7 +1544,10 @@ str BWDMulticolumnGroupApproximate(Clien
                                assert(histogramSlot->headApproximation);
                                assert(histogramSlot->tailPositions);
                                assert(getCount(histogramSlot->tailPositions) 
== getCount(histogramSlot->tailApproximation));
-                               if(0){//print histogram
+                               
+
+                       }
+                       if(0){//print histogram
                                        clHead* positions;
                                        clTail* counts;
                                        size_t bufferSize;
@@ -1557,15 +1556,13 @@ str BWDMulticolumnGroupApproximate(Clien
                                        positions = 
getPositionsColumn(batHeadApproximation(histo), GDKmalloc(bufferSize), 
&bufferSize);
                                        
getApproximateValuesColumn(batTailApproximation(histo), NULL, &bufferSize);
                                        counts = 
getApproximateValuesColumn(batTailApproximation(histo), GDKmalloc(bufferSize), 
&bufferSize);
-                                       for (i = 0; i < positions->count; ++i)
+                                       for (i = 0; i < histogramSize; ++i)
                                                if(((unsigned 
int*)counts->elements)[i])
-                                                       printf ("%u: %u, 
(i=%u)\n", positions->positions[i], ((unsigned int*)counts->elements)[i], i);
+                                                       printf ("=== %u: %u, 
(i=%u)\n", positions->positions[i], ((unsigned int*)counts->elements)[i], i);
 
                                        GDKfree(positions);
                                        GDKfree(counts);
                                }
-
-                       }
                        BBPkeepref(*retbid = groupIDs->batCacheid);
                        BBPkeepref(*rethisto = histo->batCacheid);
                }
diff --git a/monetdb5/extras/bwd/utilities.c b/monetdb5/extras/bwd/utilities.c
--- a/monetdb5/extras/bwd/utilities.c
+++ b/monetdb5/extras/bwd/utilities.c
@@ -441,12 +441,13 @@ static inline char* getVarcharValue(cons
 
 bounds findVarchar1Bounds(const char* subject, const size_t size, const size_t 
width, const char* dictionary){
        assert(size>0);
+       assert(width == 1);
        {
                char value = *getVarcharValue(subject, dictionary, 0, width);
                bounds result = {value, value};
                unsigned int i;
                for (i = 1; i < size; ++i) {
-                       value = VarHeapValRaw(subject, i, width);
+                       value = subject[i];
                        result.min = MIN(result.min, value);
                        result.max = MAX(result.max, value);
                }
@@ -465,6 +466,7 @@ unsigned int decomposeVarchar1Array(cons
        const size_t approximationSize = ceil(size*approximationBits/8.0) + 
sizeof(long) + sizeof(clTail);
        clTail* approximation = GDKzalloc(approximationSize);
        unsigned int i;
+       assert(width == 1);
 
        slot->tailOffsetBits = 8-neededBits;
        slot->approximationBits = approximationBits;
@@ -476,9 +478,10 @@ unsigned int decomposeVarchar1Array(cons
        approximation->base = subjectBounds.min;
        slot->tailOffsetValue = approximation->base;
        approximation->count = size;
-       
+
        for (i = 0; i < size; ++i) {
-               const int value = VarHeapValRaw(subject, i, width);
+               const int value = subject[i];
+               bla[value] = 1;
                { // approximation
                        const size_t slotI = (i*approximationBits)/32;
                        const unsigned int offset = (i*approximationBits)%32;
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to