/** * @brief GPU Circle Hough standalone version * @details This file provides the interface to run the GPU Circle Hough code from CircleHough.cu without any further programs (i.e. PandaRoot). * There are parameters which can be set as shell parameters * * @param CIRCLEHOUGH_DEVICE_NUMBER The number of the device to compute stuff on, default 0 * @param CIRCLEHOUGH_READ_N_LINES How many lines (=hits) of the input file should be read, default 1000 * @param CIRCLEHOUGH_NTHREADS How many threads should be used for computing, default 256 * @param CIRCLEHOUGH_ANGLES_STEP_SIZE The granularity for sampling the angles, default 1 (degree) * * @date 31 Jul 2015 * @author Andreas Herten * @author Ludovico Bianchi */ #include #include // getenv, atof, atoi #include "PndGpu.cu" #include "CircleHough.cu" // as Ludo quotes Andi with, "I hate declaring global stuff, but it's much easier", it is indeed! int gNThreads = -1; int gNBlocks = -1; int main() { int useDeviceNumber = getenv("CIRCLEHOUGH_DEVICE_NUMBER") != NULL ? atoi(getenv("CIRCLEHOUGH_DEVICE_NUMBER")) : 0; cudaSetDevice(useDeviceNumber); std::vector vX, vY, vR; int readInUpToLineNumber = getenv("CIRCLEHOUGH_READ_N_LINES") != NULL ? atoi(getenv("CIRCLEHOUGH_READ_N_LINES")) : 1000; gNThreads = getenv("CIRCLEHOUGH_NTHREADS") != NULL ? atoi(getenv("CIRCLEHOUGH_NTHREADS")) : 256; // either take environment variable of threads, or take 256 PndGpu::io::readPoints("../data/sample.txt", vX , vY, vR, readInUpToLineNumber); float angleStart = 0; float angleEnd = 360; float angleStepSize = getenv("CIRCLEHOUGH_ANGLES_STEP_SIZE") != NULL ? atof(getenv("CIRCLEHOUGH_ANGLES_STEP_SIZE")) : 1; int nAngles = (angleEnd - angleStart) / angleStepSize; // check if this is int? float * angles_d = GenerateAngles_Gpu(angleStart, angleEnd, angleStepSize); std::vector > tempVector = IsoCalc_allHits_Gpu(angles_d, nAngles, vX, vY, vR); cudaDeviceReset(); return 0; }