MultiBlockManagement3D extend( MultiBlockManagement3D const& management, Box3D addedBulk, Box3D addedUniqueBulk ) { std::vector<plint> newIds; SparseBlockStructure3D resultStructure = extend( management.getSparseBlockStructure(), addedBulk, addedBulk, newIds ); std::vector<plint> mpiProcesses(newIds.size()), localThreads(newIds.size()); for (pluint iNew=0; iNew<newIds.size(); ++iNew) { // Default-attribute the newly created blocks to the main process. mpiProcesses[iNew] = global::mpi().bossId(); localThreads[iNew] = 0; } return MultiBlockManagement3D ( resultStructure, management.getThreadAttribution().extend ( newIds, mpiProcesses, localThreads ), management.getEnvelopeWidth(), management.getRefinementLevel() ); }
int SobelFilterImage::runCLKernels() { cl_int status; cl::size_t<3> origin; origin[0] = 0; origin[1] = 0; origin[2] = 0; cl::size_t<3> region; region[0] = width; region[1] = height; region[2] = 1; cl::Event writeEvt; status = commandQueue.enqueueWriteImage( inputImage2D, CL_TRUE, origin, region, 0, 0, inputImageData, NULL, &writeEvt); CHECK_OPENCL_ERROR(status, "CommandQueue::enqueueWriteImage failed. (inputImage2D)"); status = commandQueue.flush(); CHECK_OPENCL_ERROR(status, "cl::CommandQueue.flush failed."); cl_int eventStatus = CL_QUEUED; while(eventStatus != CL_COMPLETE) { status = writeEvt.getInfo<cl_int>( CL_EVENT_COMMAND_EXECUTION_STATUS, &eventStatus); CHECK_OPENCL_ERROR(status, "cl:Event.getInfo(CL_EVENT_COMMAND_EXECUTION_STATUS) failed."); } // Set appropriate arguments to the kernel // input buffer image status = kernel.setArg(0, inputImage2D); CHECK_OPENCL_ERROR(status, "Kernel::setArg() failed. (inputImageBuffer)"); // outBuffer imager status = kernel.setArg(1, outputImage2D); CHECK_OPENCL_ERROR(status, "Kernel::setArg() failed. (outputImageBuffer)"); /* * Enqueue a kernel run call. */ cl::NDRange globalThreads(width, height); if (blockSizeX > width) blockSizeX = width; cl::NDRange localThreads(blockSizeX, blockSizeY); cl::Event ndrEvt; status = commandQueue.enqueueNDRangeKernel( kernel, cl::NullRange, globalThreads, localThreads, 0, &ndrEvt); CHECK_OPENCL_ERROR(status, "CommandQueue::enqueueNDRangeKernel() failed."); status = commandQueue.flush(); CHECK_OPENCL_ERROR(status, "cl::CommandQueue.flush failed."); eventStatus = CL_QUEUED; while(eventStatus != CL_COMPLETE) { status = ndrEvt.getInfo<cl_int>( CL_EVENT_COMMAND_EXECUTION_STATUS, &eventStatus); CHECK_OPENCL_ERROR(status, "cl:Event.getInfo(CL_EVENT_COMMAND_EXECUTION_STATUS) failed."); } // Enqueue Read Image origin[0] = 0; origin[1] = 0; origin[2] = 0; region[0] = width; region[1] = height; region[2] = 1; // Enqueue readBuffer cl::Event readEvt; status = commandQueue.enqueueReadImage( outputImage2D, CL_FALSE, origin, region, 0, 0, outputImageData, NULL, &readEvt); CHECK_OPENCL_ERROR(status, "CommandQueue::enqueueReadImage failed."); status = commandQueue.flush(); CHECK_OPENCL_ERROR(status, "cl::CommandQueue.flush failed."); eventStatus = CL_QUEUED; while(eventStatus != CL_COMPLETE) { status = readEvt.getInfo<cl_int>( CL_EVENT_COMMAND_EXECUTION_STATUS, &eventStatus); CHECK_OPENCL_ERROR(status, "cl:Event.getInfo(CL_EVENT_COMMAND_EXECUTION_STATUS) failed."); } return 0; }
int GaussianNoise::runCLKernels() { cl_int status; cl_int eventStatus = CL_QUEUED; cl::Event writeEvt; status = commandQueue.enqueueWriteBuffer( inputImageBuffer, CL_FALSE, 0, width * height * pixelSize, inputImageData, NULL, &writeEvt); CHECK_OPENCL_ERROR(status, "CommandQueue::enqueueWriteBuffer() failed. (inputImageBuffer)"); status = commandQueue.flush(); CHECK_OPENCL_ERROR(status, "cl::CommandQueue.flush failed."); eventStatus = CL_QUEUED; while(eventStatus != CL_COMPLETE) { status = writeEvt.getInfo<cl_int>( CL_EVENT_COMMAND_EXECUTION_STATUS, &eventStatus); CHECK_OPENCL_ERROR(status, "cl:Event.getInfo(CL_EVENT_COMMAND_EXECUTION_STATUS) failed."); } // Set appropriate arguments to the kernel // input buffer image status = kernel.setArg(0, inputImageBuffer); CHECK_OPENCL_ERROR(status, "Kernel::setArg() failed. (inputImageBuffer)"); // outBuffer imager status = kernel.setArg(1, outputImageBuffer); CHECK_OPENCL_ERROR(status, "Kernel::setArg() failed. (outputImageBuffer)"); // factor status = kernel.setArg(2, factor); CHECK_OPENCL_ERROR(status, "Kernel::setArg() failed. (factor)"); /* * Enqueue a kernel run call. */ // Each thread calculates 2 gaussian numbers cl::NDRange globalThreads(width / 2, height); cl::NDRange localThreads(blockSizeX, blockSizeY); cl::Event ndrEvt; status = commandQueue.enqueueNDRangeKernel( kernel, cl::NullRange, globalThreads, localThreads, NULL, &ndrEvt); CHECK_OPENCL_ERROR(status, "CommandQueue::enqueueNDRangeKernel() failed."); status = commandQueue.flush(); CHECK_OPENCL_ERROR(status, "cl::CommandQueue.flush failed."); eventStatus = CL_QUEUED; while(eventStatus != CL_COMPLETE) { status = ndrEvt.getInfo<cl_int>( CL_EVENT_COMMAND_EXECUTION_STATUS, &eventStatus); CHECK_OPENCL_ERROR(status, "cl:Event.getInfo(CL_EVENT_COMMAND_EXECUTION_STATUS) failed."); } // Enqueue readBuffer cl::Event readEvt; status = commandQueue.enqueueReadBuffer( outputImageBuffer, CL_FALSE, 0, width * height * pixelSize, outputImageData, NULL, &readEvt); CHECK_OPENCL_ERROR(status, "CommandQueue::enqueueReadBuffer failed. (outputImageBuffer)"); status = commandQueue.flush(); CHECK_OPENCL_ERROR(status, "cl::CommandQueue.flush failed."); eventStatus = CL_QUEUED; while(eventStatus != CL_COMPLETE) { status = readEvt.getInfo<cl_int>( CL_EVENT_COMMAND_EXECUTION_STATUS, &eventStatus); CHECK_OPENCL_ERROR(status, "cl:Event.getInfo(CL_EVENT_COMMAND_EXECUTION_STATUS) failed."); } return SDK_SUCCESS; }
int HDRToneMapping::runCLKernels() { cl_int status; cl_int eventStatus = CL_QUEUED; if (deviceType.compare("gpu") == 0) { cl::Event mapEvt; void *mapPtr = commandQueue.enqueueMapBuffer(inputImageBuffer, CL_FALSE, CL_MAP_WRITE, 0, width * height * numChannels * sizeof(cl_float), NULL, &mapEvt, &status); CHECK_OPENCL_ERROR(status, "CommandQueue::enqueueWriteBuffer() failed. (inputImageBuffer)"); status = commandQueue.flush(); CHECK_OPENCL_ERROR(status, "cl::CommandQueue.flush failed."); eventStatus = CL_QUEUED; while(eventStatus != CL_COMPLETE) { status = mapEvt.getInfo<cl_int>( CL_EVENT_COMMAND_EXECUTION_STATUS, &eventStatus); CHECK_OPENCL_ERROR(status, "cl:Event.getInfo(CL_EVENT_COMMAND_EXECUTION_STATUS) failed."); } memcpy(mapPtr, input, height * width * numChannels * sizeof(cl_float)); cl::Event unMapEvt; status = commandQueue.enqueueUnmapMemObject(inputImageBuffer, mapPtr, NULL, &unMapEvt); CHECK_OPENCL_ERROR(status, "commandQueue.enqueueUnmapObject failed"); status = commandQueue.flush(); CHECK_OPENCL_ERROR(status, "cl::CommandQueue.flush failed."); eventStatus = CL_QUEUED; while(eventStatus != CL_COMPLETE) { status = unMapEvt.getInfo<cl_int>( CL_EVENT_COMMAND_EXECUTION_STATUS, &eventStatus); CHECK_OPENCL_ERROR(status, "cl:Event.getInfo(CL_EVENT_COMMAND_EXECUTION_STATUS) failed."); } } // input buffer image status = kernel.setArg(0, inputImageBuffer); CHECK_OPENCL_ERROR(status, "Kernel::setArg() failed. (inputImageBuffer)"); // outBuffer imager status = kernel.setArg(1, outputImageBuffer); CHECK_OPENCL_ERROR(status, "Kernel::setArg() failed. (outputImageBuffer)"); // Average Luminance status = kernel.setArg(2, averageLuminance); CHECK_OPENCL_ERROR(status, "Kernel::setArg() failed. (averageLuminance)"); // Gamma status = kernel.setArg(3, gammaPattanaik); CHECK_OPENCL_ERROR(status, "Kernel::setArg() failed. (gammaPattanaik)"); // C status = kernel.setArg(4, cPattanaik); CHECK_OPENCL_ERROR(status, "Kernel::setArg() failed. (cPattanaik)"); // Delta status = kernel.setArg(5, deltaPattanaik); CHECK_OPENCL_ERROR(status, "Kernel::setArg() failed. (deltaPattanaik)"); // Width status = kernel.setArg(6, width); CHECK_OPENCL_ERROR(status, "Kernel::setArg() failed. (width)"); // numChannels status = kernel.setArg(7, numChannels); CHECK_OPENCL_ERROR(status, "Kernel::setArg() failed. (numChannels)"); // Height status = kernel.setArg(8, height); CHECK_OPENCL_ERROR(status, "Kernel::setArg() failed. (height)"); /* * Enqueue a kernel run call. */ cl::NDRange globalThreads(width, height); cl::NDRange localThreads(blockSizeX, blockSizeY); cl::Event ndrEvt; status = commandQueue.enqueueNDRangeKernel( kernel, cl::NullRange, globalThreads, localThreads, NULL, &ndrEvt); CHECK_OPENCL_ERROR(status, "CommandQueue::enqueueNDRangeKernel() failed."); status = commandQueue.flush(); CHECK_OPENCL_ERROR(status, "cl::CommandQueue.flush failed."); eventStatus = CL_QUEUED; while(eventStatus != CL_COMPLETE) { status = ndrEvt.getInfo<cl_int>( CL_EVENT_COMMAND_EXECUTION_STATUS, &eventStatus); CHECK_OPENCL_ERROR(status, "cl:Event.getInfo(CL_EVENT_COMMAND_EXECUTION_STATUS) failed."); } if (deviceType.compare("gpu") == 0) { // Enqueue readBuffer cl::Event readEvt; status = commandQueue.enqueueReadBuffer( outputImageBuffer, CL_FALSE, 0, width * height * numChannels * sizeof(cl_float), output, NULL, &readEvt); CHECK_OPENCL_ERROR(status, "CommandQueue::enqueueReadBuffer failed. (outputImageBuffer)"); status = commandQueue.flush(); CHECK_OPENCL_ERROR(status, "cl::CommandQueue.flush failed."); eventStatus = CL_QUEUED; while(eventStatus != CL_COMPLETE) { status = readEvt.getInfo<cl_int>( CL_EVENT_COMMAND_EXECUTION_STATUS, &eventStatus); CHECK_OPENCL_ERROR(status, "cl:Event.getInfo(CL_EVENT_COMMAND_EXECUTION_STATUS) failed."); } } return SDK_SUCCESS; }