Changeset: 2f8a6725ea81 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=2f8a6725ea81
Modified Files:
monetdb5/extras/bwd/cl_program_utilities.c
monetdb5/extras/bwd/operations.c
Branch: bwd
Log Message:
* (hopefully) fixed the grouping by
1. making sure the first two integers in a buffer are not used for tuple
value
2. initializing buffers properly (to zero)
Unterschiede (75 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
@@ -256,10 +256,10 @@ cl_program getGroupProgram(unsigned int
"
(((offset+approximationBits)>targetTypeBits)?(((vals[slot]<<(approximationBits-targetTypeBits+offset))
+
(vals[slot+1]>>(targetTypeBits-(approximationBits-targetTypeBits+offset))))&approximationMask):0)\n"
" +
(((offset+approximationBits)<=targetTypeBits)*(vals[slot]>>(targetTypeBits-offset-approximationBits)))\n"
" )&approximationMask);\n"
- " const uint oldValue = atomic_cmpxchg(histogramOIDs + delta,
0, inputIndex);\n"
+ " const uint oldValue = atomic_cmpxchg(histogramOIDs + delta +
2, 0, inputIndex);\n"
" const uint groupID = oldValue?oldValue:inputIndex;\n"
- " groupIDs[inputIndex] = groupID;\n"
- " atomic_inc(histogramCounts+groupID);\n"
+ " groupIDs[inputIndex+2] = groupID;\n"
+ " atomic_inc(histogramCounts+delta+2);\n"
" }\n"
"}\n";
char options[256];
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
@@ -120,6 +120,8 @@ cl_int clEnqueueFillBuffer(cl_command_qu
};
#endif
+const unsigned int zeroIntPattern[1] = {};
+
size_t calculatedBufferSize(size_t headCount, size_t approximationBits){
return (((int)ceil(headCount*approximationBits/8.0))/8)*8+16;
}
@@ -157,7 +159,6 @@ str BWDLeftJoinApproximate(bat * res, ba
result = BATnew(TYPE_void, ATOMtype(right->ttype), 0);
{
- int* zeroIntPattern = GDKzalloc(4);
const unsigned int newIndex =
getNextFreeDecomposedBATSlotIndex();
DecomposedBATSlot* slot =
getDecomposedBATSlotForIndex(newIndex);
BATsetprop(result, batRegistryIndex, TYPE_int,
(int[]){newIndex});
@@ -176,7 +177,6 @@ str BWDLeftJoinApproximate(bat * res, ba
if(err) printf("#%s, clEnqueueWriteBuffer: %s;\n",
__func__, clError(err));
err = clEnqueueFillBuffer(getCommandQueue(),
slot->tailApproximation, zeroIntPattern, sizeof(int), sizeof(clTail),
calculatedBufferSize(headCount, slot->approximationBits), 0, NULL, NULL);
if(err) printf("#%s, clEnqueueFillBuffer: %s;\n",
__func__, clError(err));
- GDKfree(zeroIntPattern);
}
for (i = 0; i < 3; ++i) {
if((err = clSetKernelArg(projectKernel, i,
sizeof(cl_mem), &((cl_mem[]){
@@ -1149,15 +1149,26 @@ str BWDGroupApproximate(int *rethisto, i
BATsetprop(groupIDs, batRegistryIndex,
TYPE_int, (int[]){newIndex});
groupIDSlot->tailPositions =
bwdClCreateBuffer(getCLContext(), CL_MEM_READ_WRITE,
sizeof(int)*newTailDefinition.count+sizeof(clHead), NULL, &err);
+ err = clEnqueueFillBuffer(getCommandQueue(),
groupIDSlot->tailPositions, zeroIntPattern, sizeof(int), 0, sizeof(clHead), 0,
NULL, NULL);
+ if(err) printf("#%s, clEnqueueFillBuffer:
%s;\n", __func__, clError(err));
+
}
{ // histogram object
const unsigned int newIndex =
getNextFreeDecomposedBATSlotIndex();
DecomposedBATSlot* histogramSlot =
getDecomposedBATSlotForIndex(newIndex);
BATsetprop(histo, batRegistryIndex, TYPE_int,
(int[]){newIndex});
+ const size_t histogramSize = pow(2.0f,
(float)batTailApproximationBits(b));
- histogramSlot->tailPositions =
bwdClCreateBuffer(getCLContext(), CL_MEM_READ_WRITE,
sizeof(int)*newTailDefinition.count+sizeof(clHead), NULL, &err);
- histogramSlot->headApproximation =
histogramSlot->tailPositions;
- histogramSlot->tailApproximation =
bwdClCreateBuffer(getCLContext(), CL_MEM_READ_WRITE,
sizeof(int)*newTailDefinition.count+sizeof(clTail), NULL, &err);
+ {
+ histogramSlot->tailPositions =
bwdClCreateBuffer(getCLContext(), CL_MEM_READ_WRITE,
sizeof(int)*histogramSize+sizeof(clHead), NULL, &err);
+ histogramSlot->headApproximation =
histogramSlot->tailPositions;
+ err =
clEnqueueFillBuffer(getCommandQueue(), histogramSlot->tailPositions,
zeroIntPattern, sizeof(int), 0, sizeof(int)*histogramSize+sizeof(clHead), 0,
NULL, NULL);
+ if(err) printf("#%s,
clEnqueueFillBuffer: %s;\n", __func__, clError(err));
+ } {
+ histogramSlot->tailApproximation =
bwdClCreateBuffer(getCLContext(), CL_MEM_READ_WRITE,
sizeof(int)*histogramSize+sizeof(clTail), NULL, &err);
+ err =
clEnqueueFillBuffer(getCommandQueue(), histogramSlot->tailApproximation,
zeroIntPattern, sizeof(int), 0, sizeof(int)*histogramSize+sizeof(clTail), 0,
NULL, NULL);
+ if(err) printf("#%s,
clEnqueueFillBuffer: %s;\n", __func__, clError(err));
+ }
}
{ // run kernel
cl_kernel groupKernel =
clCreateKernel(getGroupProgram(batTailApproximationBits(b)), "group", &err);
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list