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