hughperkins / DeepCL

OpenCL library to train deep convolutional neural networks
Mozilla Public License 2.0
865 stars 199 forks source link

Where are the weights sizes declared and defined in .cl files ? #112

Closed yashiro32 closed 7 years ago

yashiro32 commented 7 years ago

I saw the variables gInputSize, gInputSizeSquared, gFilterSize, gFilterSizeSquared, gHalfFilterSize, gOutputSize, gOutputSizeSquared used in the .cl files but could not find them declared anywhere inside the files.

hughperkins commented 7 years ago

Hi Yashiro,

They're injected as macro definitions. Working backwards, we have for example:

Options string passed into kernel compilation here: https://github.com/hughperkins/DeepCL/blob/master/src/conv/Forward1.cpp#L179

kernel = cl->buildKernelFromString(kernelSource, "convolve_imagecubes_float2", options, "cl/forward1.cl");

Options string constructed here: https://github.com/hughperkins/DeepCL/blob/master/src/conv/Forward1.cpp#L54

    options += dim.buildOptionsString();

dim.buildOptionsString() is here: https://github.com/hughperkins/DeepCL/blob/master/src/conv/LayerDimensions.cpp#L43-L65

string LayerDimensions::buildOptionsString() {
    string options = "";
    if(biased) {
         options += " -D BIASED";
    }
    options += " -D gNumInputPlanes=" + toString(inputPlanes);
    options += " -D gInputPlanes=" + toString(inputPlanes);
    options += " -D gInputSize=" + toString(inputSize);
    options += " -D gInputSizeSquared=" + toString(square(inputSize));
    options += " -D gNumFilters=" + toString(numFilters);
    options += " -D gFilterSize=" + toString(filterSize);
    options += " -D gHalfFilterSize=" + toString(filterSize >> 1);
    options += " -D gFilterSizeSquared=" + toString(square(filterSize));
    options += " -D gNumOutputPlanes=" + toString(numFilters);
    options += " -D gOutputPlanes=" + toString(numFilters);
    options += " -D gOutputSize=" + toString(outputSize);
    options += " -D gOutputSizeSquared=" + toString(square(outputSize));
    options += " -D gPadZeros=" + toString(padZeros ? 1 : 0);
    options += " -D gMargin=" + toString(padZeros ? filterSize >> 1 : 0);
    options += " -D gEven=" + toString(filterSize % 2 == 0 ? 1 : 0);
    options += " -D gSkip=" + toString(skip);
    return options;
}