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
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list