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

* turns out: you get incorrect results if you don't initialize buffers 
correctly :-&


Unterschiede (57 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
@@ -159,12 +159,10 @@ cl_program getUSelectProgram(int type, c
                "    size_t outslot = 
(index*approximationBits)/targetTypeBits;\n"
                "    size_t outoffset = 
(index*approximationBits)%targetTypeBits;\n"
                "    if(outoffset+approximationBits > 8*sizeof(accessType)){"
-               /* "      outputTail[2+outslot] |= (delta << 
(approximationBits-(8*sizeof(accessType)-outoffset)));" */
                "      atomic_add(&(outputTail[2+outslot]), 
(approximationBits+outoffset-(8*sizeof(accessType))));"
                "      atomic_add(&(outputTail[2+outslot+1]), (delta << 
(8*sizeof(accessType)-(outoffset+approximationBits-targetTypeBits))));"         
                "    }else{"
                "      atomic_add(&(outputTail[2+outslot]), (delta << 
(8*sizeof(accessType)-outoffset-approximationBits)));"
-               /* "      outputTail[2+outslot] |= (delta << 
(8*sizeof(accessType)-outoffset-approximationBits));" */
                "    }"
                "   }\n"
                "  } \n"
@@ -208,8 +206,9 @@ cl_program getUSelectProgram(int type, c
                "    if(outoffset+approximationBits > 8*sizeof(accessType)){"
                "      atomic_add(&(outputTail[2+outslot]), (delta >> 
(approximationBits+outoffset-(8*sizeof(accessType)))));"
                "      atomic_add(&(outputTail[2+outslot+1]), (delta << 
(8*sizeof(accessType)-(outoffset+approximationBits-targetTypeBits))));"         
-               "    }else"
-                       "      atomic_add(&(outputTail[2+outslot]), (delta << 
(8*sizeof(accessType)-outoffset-approximationBits)));"
+               "    }else{"
+               "      atomic_add(&(outputTail[2+outslot]), (delta << 
(8*sizeof(accessType)-outoffset-approximationBits)));"
+               "    }"
                "  }\n"
                " }\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
@@ -528,13 +528,14 @@ static inline str uselect(bat *res, bat 
                                DecomposedBATSlot* slot = 
getDecomposedBATSlotForIndex(newIndex);
                                cl_int err;
                                const int size = 
MIN(dataCount,MAX_INTERMEDIATE_RESULT_SIZE)*sizeof(int)+sizeof(clHead);
-
+                               size_t tailBufferElementSize;
                                BATsetprop(result, batRegistryIndex, TYPE_int, 
(int[]){newIndex});
                                slot->approximationBits = 
batTailApproximationBits(data);
                                slot->tailOffsetBits = batTailOffsetBits(data);
                                slot->tailOffsetValue = 
batTailOffsetValue(data);
                                slot->residuals = NULL;
-                               slot->tailApproximation = 
bwdClCreateBuffer(getCLContext(), CL_MEM_READ_WRITE, 
ceil(MIN(dataCount,MAX_INTERMEDIATE_RESULT_SIZE)*slot->approximationBits/8.0)+sizeof(clTail),
 NULL, &err);
+                               tailBufferElementSize = 
ceil(MIN(dataCount,MAX_INTERMEDIATE_RESULT_SIZE)*slot->approximationBits/8.0);
+                               slot->tailApproximation = 
bwdClCreateBuffer(getCLContext(), CL_MEM_READ_WRITE, 
tailBufferElementSize+sizeof(clTail), NULL, &err);
                                if(err) printf("#%s, bwdClCreateBuffer: %s;\n", 
__func__, clError(err));
                                if(0) printf ("%s result tail approximation: 
%p\n", __func__, slot->tailApproximation);
                                slot->headApproximation = 
bwdClCreateBuffer(getCLContext(), CL_MEM_READ_WRITE, size, NULL, &err);
@@ -546,6 +547,8 @@ static inline str uselect(bat *res, bat 
                                { //propagate base
                                        if((err = 
clEnqueueWriteBuffer(getCommandQueue(), slot->tailApproximation, CL_TRUE, 0, 
sizeof(clTail), (clTail[1]){{.count = 0, .base=dataHeader.base}}, 0, NULL, 
NULL)))
                                                printf("#%s, 
clEnqueueWriteBuffer: %s;\n", __func__, clError(err));
+                                       clEnqueueFillBuffer(getCommandQueue(), 
slot->tailApproximation, zeroIntPattern, sizeof(int), sizeof(clTail), 
tailBufferElementSize, 0, NULL, NULL);
+
                                }
 
 
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to