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

* fixed a minor bug with result set space allocation for the approximation


Unterschiede (89 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
@@ -51,7 +51,7 @@ cl_program getProjectionLeftjoinProgram(
                "    outputTail->values[get_global_id(0)*approximationBytes+i] 
= approximation[offset + i];\n"
                "    value += approximation[offset + i] << 8*i;"
                "  }\n"
-               /* "  printf(\"projected value (%d): %d\\n\", 
inputTail->positions[get_global_id(0)], value);" */
+               /* "  printf(\"projected value (%d): %d\\n\", 
inputTail->positions[get_global_id(0)], value<<(8*(4-approximationBytes)));" */
                "}";
                char options[64];
                snprintf(options, 64, "-D approximationBytes=%d", 
approximationBits/8);
@@ -94,10 +94,13 @@ cl_program getUSelectProgram(int type, c
                "{\n"
                "    const int index = atomic_inc(&(outputHead->count));"
                "    atomic_inc(&(outputTail->count));" // TODO: this could 
probably be done more efficiently
+               /* "    printf(\"selected value %%d from slot %%d into slot 
%%d\\n\", value, get_global_id(0), index);\n" */
                "    const int offset = index * %4$d;\n"
                "    outputHead->positions[index] = get_global_id(0);\n"
-               "    for(int i = 0; i < %4$d; i++)\n"
+               "    for(int i = 0; i < %4$d; i++){\n"
                "      outputTail->values[offset+i] = approximation[inputOffset 
+ i];\n"
+               /* "      printf(\"set byte %%d to %%d\\n\", 
offset+i,outputTail->values[offset+i]);" */
+               "    }\n"
                "  }\n"
                "}";
        char* sourceCode = malloc(16384);
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
@@ -238,7 +238,7 @@ static inline void superverboseprintf(co
 
 
 static inline str uselect(bat *res, bat *bid, ptr val, char *OP, ptr val2, 
char *OP2, Client cntxt){
-BAT* data = BATdescriptor(*bid);
+       BAT* data = BATdescriptor(*bid);
        if(data == NULL)
                return MAL_SUCCEED;
        assert(ATOMstorage(BATttype(data)) == TYPE_int); // type specific
@@ -256,7 +256,8 @@ BAT* data = BATdescriptor(*bid);
                        slot->approximationBits = 
batTailApproximationBits(data);
                        slot->residuals = NULL;
                        cl_int err;
-                       slot->tailApproximation = 
clCreateBuffer(getCLContext(), CL_MEM_READ_WRITE, 
BATcount(data)*slot->approximationBits/8+sizeof(clTail), NULL, &err);
+                       slot->tailApproximation = 
clCreateBuffer(getCLContext(), CL_MEM_READ_WRITE, 
dataCount*slot->approximationBits/8+sizeof(clTail), NULL, &err);
+                       if(0) printf ("%s result tail approximation: %p\n", 
__func__, slot->tailApproximation);
                        const int size = dataCount*sizeof(int)+sizeof(clHead);
                        slot->headApproximation = 
clCreateBuffer(getCLContext(), CL_MEM_READ_WRITE, size, NULL, &err);
                        slot->tailPositions = slot->headApproximation;
@@ -288,6 +289,18 @@ BAT* data = BATdescriptor(*bid);
 
                err = clEnqueueNDRangeKernel(getCommandQueue(), selectKernel, 
1, (const size_t[]){0}, (const size_t[]){dataCount}, (const size_t[]){1}, 0, 
NULL, NULL);
                if(err) printf("#%s, clEnqueueNDRangeKernel: %s;\n", __func__, 
clError(err));
+               if(0){
+                               clFinish(getCommandQueue());
+                               clTail* compressedTail;
+                               size_t resultSize;
+                               printf ("%s result tail result: %p\n", 
__func__, batTailApproximation(result));
+
+                               
clGetMemObjectInfo(batTailApproximation(result), CL_MEM_SIZE, sizeof(size_t), 
&resultSize
+                                                                               
                         , NULL);
+                               compressedTail = malloc(resultSize);
+                               cl_int err = 
clEnqueueReadBuffer(getCommandQueue(), batTailApproximation(result), CL_TRUE, 
0, resultSize, compressedTail , 0, NULL, NULL);      
+                               if(err) printf("#%s, clEnqueueReadBuffer: 
%s;\n", __func__, clError(err));
+                       }
        }
        if(0) printf ("%s result bat (%d) is of type [%s%s, %s%s]\n", __func__, 
result->batCacheid, typeNames[BAThtype(result)], BAThvoid(result)?" (void)":"", 
typeNames[BATttype(result)], BATtvoid(result)?" (void)":"");
        BBPkeepref(*res = result->batCacheid);
@@ -333,6 +346,8 @@ str uselectrefine(bat *res, bat *bid, pt
                        clTail* compressedTail;
                        {
                                size_t approximationSize;
+                               if(0) printf ("%s approximation tail 
approximation: %p\n", __func__, batTailApproximation(approximation));
+
                                
clGetMemObjectInfo(batTailApproximation(approximation), CL_MEM_SIZE, 
sizeof(size_t), &approximationSize
                                                                                
                         , NULL);
                                compressedTail = malloc(approximationSize);
diff --git a/monetdb5/extras/bwd/utilities.h b/monetdb5/extras/bwd/utilities.h
--- a/monetdb5/extras/bwd/utilities.h
+++ b/monetdb5/extras/bwd/utilities.h
@@ -14,7 +14,7 @@ typedef struct {
 typedef struct {
        int count;
        int padding;
-       char elements[];
+       unsigned char elements[];
 } clTail;
 
 typedef struct {
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to