| 555 | |
| 556 | |
| 557 | int test_stream_write( cl_device_id device, cl_context context, cl_command_queue queue, int num_elements, size_t size, const char *type, int loops, |
| 558 | void *inptr[5], const char *kernelCode[], const char *kernelName[], int (*fn)(void *,void *,int), MTdata d ) |
| 559 | { |
| 560 | cl_mem streams[10]; |
| 561 | void *outptr[5]; |
| 562 | cl_program program[5]; |
| 563 | cl_kernel kernel[5]; |
| 564 | cl_event writeEvent; |
| 565 | cl_ulong queueStart, submitStart, writeStart, writeEnd; |
| 566 | size_t ptrSizes[5], outPtrSizes[5]; |
| 567 | size_t threads[1]; |
| 568 | int err, err_count = 0; |
| 569 | int i, ii; |
| 570 | |
| 571 | threads[0] = (size_t)num_elements; |
| 572 | |
| 573 | ptrSizes[0] = size; |
| 574 | ptrSizes[1] = ptrSizes[0] << 1; |
| 575 | ptrSizes[2] = ptrSizes[1] << 1; |
| 576 | ptrSizes[3] = ptrSizes[2] << 1; |
| 577 | ptrSizes[4] = ptrSizes[3] << 1; |
| 578 | |
| 579 | loops = ( loops < 5 ? loops : 5 ); |
| 580 | |
| 581 | for( i = 0; i < loops; i++ ) |
| 582 | { |
| 583 | outPtrSizes[i] = ptrSizes[i]; |
| 584 | } |
| 585 | |
| 586 | for( i = 0; i < loops; i++ ){ |
| 587 | ii = i << 1; |
| 588 | streams[ii] = clCreateBuffer(context, CL_MEM_READ_WRITE, |
| 589 | ptrSizes[i] * num_elements, NULL, &err); |
| 590 | if( ! streams[ii] ){ |
| 591 | free( outptr[i] ); |
| 592 | log_error( " clCreateBuffer failed\n" ); |
| 593 | return -1; |
| 594 | } |
| 595 | if( ! strcmp( type, "half" ) ){ |
| 596 | outptr[i] = malloc( outPtrSizes[i] * num_elements * 2 ); |
| 597 | streams[ii + 1] = |
| 598 | clCreateBuffer(context, CL_MEM_READ_WRITE, |
| 599 | outPtrSizes[i] * 2 * num_elements, NULL, &err); |
| 600 | } |
| 601 | else{ |
| 602 | outptr[i] = malloc( outPtrSizes[i] * num_elements ); |
| 603 | streams[ii + 1] = |
| 604 | clCreateBuffer(context, CL_MEM_READ_WRITE, |
| 605 | outPtrSizes[i] * num_elements, NULL, &err); |
| 606 | } |
| 607 | if( ! streams[ii+1] ){ |
| 608 | clReleaseMemObject(streams[ii]); |
| 609 | free( outptr[i] ); |
| 610 | log_error( " clCreateBuffer failed\n" ); |
| 611 | return -1; |
| 612 | } |
| 613 | |
| 614 | err = clEnqueueWriteBuffer( queue, streams[ii], false, 0, ptrSizes[i]*num_elements, inptr[i], 0, NULL, &writeEvent ); |
no test coverage detected