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

* made sintklaas run on the gpu using bitwise decomposition
  * explicitly initializing intermediate buffers to zero now (by copying data 
from the cpu)
        * switched to 64-bit calculations of the residual addresses


Unterschiede (93 Zeilen):

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
@@ -94,6 +94,28 @@ clTail* getApproximateValuesColumn(cl_me
        return buffer;
 }
 
+
+cl_int clEnqueueFillBuffer(cl_command_queue    command_queue ,
+                    cl_mem              buffer , 
+                    const void *        pattern , 
+                    size_t              pattern_size , 
+                    size_t              offset , 
+                    size_t              size , 
+                    cl_uint             num_events_in_wait_list , 
+                    const cl_event *    event_wait_list , 
+                    cl_event *          event ) {
+       if(pattern_size == 4 && ((int*)pattern)[0] == 0){
+               cl_int err = 0;
+               void* tmpbuffer = calloc(size, 1);
+               err = clEnqueueWriteBuffer(command_queue, buffer, CL_FALSE, 
offset, size, tmpbuffer, num_events_in_wait_list, event_wait_list, event); 
+               if(err) printf("#%s, clEnqueueWriteBuffer: %s;\n", __func__, 
clError(err));
+               free(tmpbuffer);
+               return err;
+       }
+       return -1;
+};
+
+
 str BWDLeftJoinApproximate(bat * res, bat * l, bat * r){
        BAT* left;
        BAT* right = BATdescriptor(*r);
@@ -170,13 +192,14 @@ str BWDLeftJoinApproximate(bat * res, ba
                        if(CL_REFCOUNT_DEBUG) printf ("retaining %p\n", 
leftColumn);
                        if((err=clRetainMemObject(leftColumn)))
                                printf("#%s, clRetainMemObject: %s;\n", 
__func__, clError(err));
-                       slot->tailApproximation = 
bwdClCreateBuffer(getCLContext(), CL_MEM_READ_WRITE, 
headCount*slot->approximationBits/8+sizeof(clTail), NULL, &err);
+                       slot->tailApproximation = 
bwdClCreateBuffer(getCLContext(), CL_MEM_READ_WRITE, 
headCount*slot->approximationBits/8+8+sizeof(clTail), NULL, &err);
                        if(CL_REFCOUNT_DEBUG) printf ("%s, result (%d) tail 
approximation: %p\n", __func__, result->batCacheid , 
batTailApproximation(result));
                        assert(slot->tailPositions);
                        if(err) printf("#%s, bwdClCreateBuffer: %s;\n", 
__func__, clError(err));
 
                        clEnqueueWriteBuffer(getCommandQueue(), 
slot->tailApproximation, CL_TRUE, 0, sizeof(clTail), &newTailDefinition, 0, 
NULL, NULL); 
                        if(err) printf("#%s, bwdClCreateBuffer: %s;\n", 
__func__, clError(err));
+                       clEnqueueFillBuffer(getCommandQueue(), 
slot->tailApproximation, (int[]){0}, sizeof(int), sizeof(clTail), 
headCount*slot->approximationBits/8+8, 0, NULL, NULL);
 
                }
                for (i = 0; i < 3; ++i) {
@@ -205,8 +228,8 @@ str BWDLeftJoinApproximate(bat * res, ba
        return MAL_SUCCEED;
 };
 
-static inline int decompressIntValue(const int approximationI, const int 
approximationBits, const int offsetBits, const clTail* compressedTail, const 
unsigned int* residuals, const int residualI){
-       const int residualBits = 32-approximationBits-offsetBits;
+static inline int decompressIntValue(const int approximationI, const int 
approximationBits, const int offsetBits, const clTail* compressedTail, const 
unsigned int* residuals, const unsigned int residualI){
+       const unsigned int residualBits = 32-approximationBits-offsetBits;
        const unsigned int residualMask = (1 << residualBits)-1;
        const int approximationMask = (1<<(approximationBits))-1;
        const unsigned int* vals = (unsigned int*) compressedTail->elements;
@@ -224,7 +247,7 @@ static inline int decompressIntValue(con
                                 + 
(vals[slotI+1]>>(targetTypeBits-(approximationBits-targetTypeBits+offset))))&approximationMask):0);
 
        
-       const size_t residualSlotI = (residualI*residualBits)/32;
+       const size_t residualSlotI = (((unsigned long)residualI)*((unsigned 
long)residualBits))/32UL;
        const unsigned int residualOffset = (residualI*residualBits)%32;
        const unsigned int residual =
                (residualOffset+residualBits <= targetTypeBits)*
@@ -758,6 +781,7 @@ str BWDSemijoinApproximate(int *res, int
 
                                clEnqueueWriteBuffer(getCommandQueue(), 
slot->tailApproximation, CL_TRUE, 0, sizeof(clTail), &newTailDefinition, 0, 
NULL, NULL); 
                                if(err) printf("#%s, bwdClCreateBuffer: %s;\n", 
__func__, clError(err));
+                       clEnqueueFillBuffer(getCommandQueue(), 
slot->tailApproximation, (int[]){0}, sizeof(int), sizeof(clTail), 
headCount*slot->approximationBits/8+8, 0, NULL, NULL);
                        }
                        {
                                int i;
@@ -772,7 +796,7 @@ str BWDSemijoinApproximate(int *res, int
                                if (synchronousGPU) clFinish(getCommandQueue());
 
                        }
-                       if(1){
+                       if(0){
                                BAT* approximation = result;
                                clHead* supersetPositionsColumn;
                                size_t bufferSize;
@@ -785,6 +809,7 @@ str BWDSemijoinApproximate(int *res, int
                                        
getApproximateValuesColumn(batTailApproximation(approximation), NULL, 
&bufferSize);
                                        supersetApproximateValuesColumn = 
getApproximateValuesColumn(batTailApproximation(approximation), 
malloc(bufferSize), &bufferSize);
                                        if(1) printf ("first position: %d\n", 
supersetPositionsColumn->positions[0]);
+                                       (void)supersetApproximateValuesColumn;
                                }
                                
                        }
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to