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