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

Reply via email to