Example #1
0
static void Init_b(long long * gradIn, long long * gradOut, long long * primitives)
{
    dnnError_t err;

    //gradOut, layout is user or mkl
    dnnLayout_t lt_out_b     = (dnnLayout_t)primitives[POOL_L_B_O];
    dnnLayout_t lt_out       = (dnnLayout_t)gradOut[MKLLayout];
    if (lt_out==NULL) lt_out  = (dnnLayout_t)primitives[POOL_L_O];
    //create conversion and buff if necessary
    dnnPrimitive_t cv_out_b = NULL;    float * buf_out_b = NULL;
    CHECK_ERR( try_convert(&cv_out_b, &buf_out_b, lt_out, lt_out_b) , err );
    //save
    primitives[CV_POOLING_BACKWARD_OUTPUT]      = (long long)cv_out_b;
    primitives[BUFFER_POOLING_BACKWARD_OUTPUT]  = (long long)buf_out_b;

    //gradIn, layout
    gradIn[CPULayout]   = primitives[POOL_L_I];
    dnnLayout_t lt_in_b = (dnnLayout_t)primitives[POOL_L_B_I];
    float* buf_in_b = NULL;
    CHECK_ERR( dnnAllocateBuffer_F32((void**)(&buf_in_b), lt_in_b), err );
    primitives[BUFFER_POOLING_BACKWARD_INPUT] = (long long)buf_in_b;

ERR_RETURN:
    return;
}
Example #2
0
//gradOut: output gradient of CONV layer, known parameters
//gradIn:  input gradient, to be calculated
static void Conv_bdata_init(
  long long * gradIn,
  long long * gradOut,
  int N, int oC, int oH, int oW,
  long long * weight,
  long long * primitives)
{
    dnnError_t err;

    //get gradOut layout, create conversion if necessary
    dnnLayout_t lt_out  = (dnnLayout_t)gradOut[MKLLayout];
    if(lt_out==NULL)
    {
        lt_out  = (dnnLayout_t)primitives[L_O];
    }
    dnnPrimitive_t cv_out_bdata = NULL;	float * buf_out_bdata = NULL;
    CHECK_ERR( try_convert(&cv_out_bdata, &buf_out_bdata, lt_out, (dnnLayout_t)primitives[L_BD_O]) , err );
	primitives[CONVERT_BWDDATA_OUTPUT] = (long long)cv_out_bdata;
	primitives[BUFFER_BWDDATA_OUTPUT]  = (long long)buf_out_bdata;

	//for filter
	dnnLayout_t lt_filter       = (dnnLayout_t)primitives[L_W];
	dnnLayout_t lt_filter_bdata = (dnnLayout_t)primitives[L_BD_W];
    dnnPrimitive_t cv_filter_bdata = NULL; float * buf_filter_bdata = NULL;
    CHECK_ERR( try_convert(&cv_filter_bdata, &buf_filter_bdata, lt_filter, lt_filter_bdata), err );
	primitives[BUFFER_BWDDATA_FILTER]  = (long long)buf_filter_bdata;
	primitives[CONVERT_BWDDATA_FILTER] = (long long)cv_filter_bdata;

    //create gradInput layout and memory
    dnnLayout_t lt_in_bdata = (dnnLayout_t)primitives[L_BD_I];
    float * buf_in_bdata = (float*)(gradIn[CPUPtr]);
    CHECK_ERR( dnnAllocateBuffer_F32((void**)(&buf_in_bdata), lt_in_bdata), err );
    primitives[BUFFER_BWDDATA_INPUT] = (long long)buf_in_bdata;
    gradIn[CPULayout] = (long long)(dnnLayout_t)primitives[L_I_CHWN];

    float* gradOutTransPtr = NULL;
    if (gradOut[MKLLayout] == 0)
	{
		gradOutTransPtr = (float*)malloc(N*oC*oH*oW*sizeof(float));
	}
	primitives[BUFFER_TRANS_OUTPUT] = (long long)gradOutTransPtr;

ERR_RETURN:
    return;
}
static GCharsetConverter *
guess_encoding (GeditDocumentOutputStream *stream,
		const void                *inbuf,
		gsize                      inbuf_size)
{
	GCharsetConverter *conv = NULL;

	if (inbuf == NULL || inbuf_size == 0)
	{
		stream->priv->is_utf8 = TRUE;
		return NULL;
	}

	if (stream->priv->encodings != NULL &&
	    stream->priv->encodings->next == NULL)
	{
		stream->priv->use_first = TRUE;
	}

	/* We just check the first block */
	while (TRUE)
	{
		const GeditEncoding *enc;

		if (conv != NULL)
		{
			g_object_unref (conv);
			conv = NULL;
		}

		/* We get an encoding from the list */
		enc = get_encoding (stream);

		/* if it is NULL we didn't guess anything */
		if (enc == NULL)
		{
			break;
		}

		gedit_debug_message (DEBUG_UTILS, "trying charset: %s",
				     gedit_encoding_get_charset (stream->priv->current_encoding->data));

		if (enc == gedit_encoding_get_utf8 ())
		{
			gsize remainder;
			const gchar *end;
			
			if (g_utf8_validate (inbuf, inbuf_size, &end) ||
			    stream->priv->use_first)
			{
				stream->priv->is_utf8 = TRUE;
				break;
			}

			/* Check if the end is less than one char */
			remainder = inbuf_size - (end - (gchar *)inbuf);
			if (remainder < 6)
			{
				stream->priv->is_utf8 = TRUE;
				break;
			}

			continue;
		}

		conv = g_charset_converter_new ("UTF-8",
						gedit_encoding_get_charset (enc),
						NULL);

		/* If we tried all encodings we use the first one */
		if (stream->priv->use_first)
		{
			break;
		}

		/* Try to convert */
		if (try_convert (conv, inbuf, inbuf_size))
		{
			break;
		}
	}

	if (conv != NULL)
	{
		g_converter_reset (G_CONVERTER (conv));
	}

	return conv;
}
Example #4
0
static void Conv_bfilter_init(
  long long * input,
  long long * gradOutput,
  long long * gradWeight,
  long long * primitives,
  int N, int oC, int oH, int oW)
{
    dnnError_t err;

    //for gradOut
    dnnLayout_t lt_out = (dnnLayout_t)(gradOutput[MKLLayout]);
    if(lt_out==NULL) lt_out = (dnnLayout_t)primitives[L_O];
    dnnPrimitive_t cv_out_bfilter = NULL; float* buf_out_bfilter = NULL;
    CHECK_ERR( try_convert(&cv_out_bfilter, &buf_out_bfilter, lt_out, (dnnLayout_t)primitives[L_BF_O]) , err );
	primitives[CONVERT_BWDFILTER_OUTPUT] = (long long)cv_out_bfilter;
	primitives[BUFFER_BWDFILTER_OUTPUT]  = (long long)buf_out_bfilter;

	//for the first layer without delta, input gradOut should first be transposed
    float* gradOutTransPtr = NULL;
    if ( gradOutput[MKLLayout] == 0 && primitives[BUFFER_TRANS_OUTPUT] == 0)
	{
		gradOutTransPtr = (float*)malloc(N*oC*oH*oW*sizeof(float));
		primitives[BUFFER_TRANS_OUTPUT] = (long long)gradOutTransPtr;
	}

    //for filter
	dnnLayout_t lt_filter         = (dnnLayout_t)primitives[L_W];
	dnnLayout_t lt_filter_bfilter = (dnnLayout_t)primitives[L_BF_W];
    dnnPrimitive_t cv_filter_bfilter = NULL; float * buf_filter_bfilter = NULL;
    if(!dnnLayoutCompare_F32(lt_filter_bfilter, lt_filter))
    {
        CHECK_ERR( dnnConversionCreate_F32(&cv_filter_bfilter, lt_filter_bfilter, lt_filter), err);
		CHECK_ERR( dnnAllocateBuffer_F32((void**)&buf_filter_bfilter, lt_filter_bfilter), err);
    }
    primitives[BUFFER_BWDFILTER_FILTER]  = (long long)buf_filter_bfilter;
	primitives[CONVERT_BWDFILTER_FILTER] = (long long)cv_filter_bfilter;

    //for input
    dnnLayout_t lt_in_real = (dnnLayout_t)input[MKLLayout];
    if(lt_in_real==NULL)
    {
        lt_in_real = (dnnLayout_t)primitives[L_I];
    }
    dnnLayout_t lt_in_bfilter = (dnnLayout_t)primitives[L_BF_I];
    dnnPrimitive_t cv_in_bfilter = NULL; float* buf_in_bfilter = (float*)(input[CPUPtr]);
    CHECK_ERR( try_convert(&cv_in_bfilter, &buf_in_bfilter, lt_in_real, lt_in_bfilter), err );
    primitives[BUFFER_BWDFILTER_INPUT]  = (long long)buf_in_bfilter;
    primitives[CONVERT_BWDFILTER_INPUT] = (long long)cv_in_bfilter;

    //if has bias
    if (primitives[BDW_BIAS_INDEX] != 0)
    {
        //convert for grad_bias if necessary
        dnnLayout_t lt_bias_bias  = (dnnLayout_t)primitives[L_B_B];
        dnnLayout_t lt_bias       = (dnnLayout_t)primitives[L_B];
        dnnPrimitive_t cv_bias_bias = NULL; float * buf_bias_bias = NULL;
        CHECK_ERR( dnnConversionCreate_F32(&cv_bias_bias, lt_bias_bias, lt_bias), err);
		CHECK_ERR( dnnAllocateBuffer_F32((void**)&buf_bias_bias, lt_bias_bias), err);
        primitives[BUFFER_BIAS_BIAS]  = (long long)buf_bias_bias;
        primitives[CV_BIAS_BIAS] =      (long long)cv_bias_bias;

        //convert for grad_out if necessary
        dnnLayout_t lt_bias_out = (dnnLayout_t)primitives[L_B_O];
        dnnPrimitive_t cv_out_bias = NULL; float* buf_out_bias = (float*)(input[CPUPtr]);
        CHECK_ERR( try_convert(&cv_out_bias, &buf_out_bias, lt_out, lt_bias_out), err );
        primitives[BUFFER_BIAS_OUT]  = (long long)buf_out_bias;
        primitives[CV_BIAS_OUT] = (long long)cv_out_bias;
    }


ERR_RETURN:
    return;
}
Example #5
0
static int Conv_f_init(
  long long * input,
  long long * output,
  long long * weight,
  long long * primitives,
  int N, int inC, int inH, int inW,
  int kH, int kW,
  int dH, int dW,
  int padH, int padW,
  int outC, int outH, int outW,
  int hasBias)
{
    dnnError_t err;

    //init dimensions
	size_t inputSize[DIM4]  =   { inW,  inH,  inC, N};
	size_t outputSize[DIM4] =   {outW, outH, outC, N};
	size_t filterSize[DIM4] =   {  kW,   kH,  inC, outC};
	size_t stride[DIM2]     =   {  dW,   dH};
	int    pad[DIM2]        =   {-padW, -padH};
	size_t biasSize[1]      =   {outC};
	size_t biasStrides[1]   =   { 1 };

    //using NCHW layout
	size_t filterStridesNCHW[DIM4] = {1,  kW,      kW*kH,     kW*kH*inC};
    size_t inputStridesNCHW[DIM4]  = {1,  inW,   inW*inH,    inW*inH*inC};
    size_t outputStridesNCHW[DIM4] = {1, outW, outW*outH, outW*outH*outC};

    //CHWN
    size_t filterStridesCHWN[DIM4] = {outC,  outC*kW,      outC*kW*kH,     1};
    size_t inputStridesCHWN[DIM4]  = {N,  N*inW,   N*inW*inH,    1};
    size_t outputStridesCHWN[DIM4] = {N,  N*outW,  N*outW*outH,  1};

    //create execute and save into primitives
    dnnPrimitiveAttributes_t attributes = NULL;
	CHECK_ERR( dnnPrimitiveAttributesCreate_F32(&attributes), err );
	dnnPrimitive_t conv_f       = NULL;    //forward operation
	dnnPrimitive_t conv_bdata   = NULL;    //backward calculate gradient input
	dnnPrimitive_t conv_bfilter = NULL;    //backward calculate gradient filter(weight)
    dnnPrimitive_t conv_b_bias  = NULL;    //backward bias

    //create layout and save
    //lt_in, layout of input in NCHW form
    //lt_filter_f, required layout (MKL layout) for forward for weight
    //lt_out_bfilter, required layout for backward weight update for output
	dnnLayout_t lt_in_NCHW,    lt_filter,         lt_out_NCHW,   lt_in_CHWN,  lt_out_CHWN, lt_bias_CHWN=NULL;
	dnnLayout_t lt_in_f,       lt_filter_f,       lt_out_f,      lt_bias_f;
	dnnLayout_t lt_in_bdata,   lt_filter_bdata,   lt_out_bdata,  lt_bias_bdata;
    dnnLayout_t lt_in_bfilter, lt_filter_bfilter, lt_out_bfilter,lt_bias_bias, lt_out_bias;

 	if (hasBias)
 	{
 	    CHECK_ERR(dnnConvolutionCreateForwardBias_F32(   &conv_f,   attributes, dnnAlgorithmConvolutionDirect, DIM4, inputSize, outputSize, filterSize, stride, pad, dnnBorderZeros),err);
 	    CHECK_ERR(dnnConvolutionCreateForwardBias_F32(   &conv_f,   attributes, dnnAlgorithmConvolutionDirect, DIM4, inputSize, outputSize, filterSize, stride, pad, dnnBorderZeros),err);
        CHECK_ERR( dnnLayoutCreate_F32(&lt_bias_CHWN, 1, biasSize, biasStrides), err );
    	CHECK_ERR( dnnLayoutCreateFromPrimitive_F32(&lt_bias_f,   conv_f, dnnResourceBias   ) , err );
        CHECK_ERR(dnnConvolutionCreateBackwardBias_F32(  &conv_b_bias,  attributes, dnnAlgorithmConvolutionDirect, DIM4, outputSize),err);
        CHECK_ERR( dnnLayoutCreateFromPrimitive_F32(&lt_bias_bias,   conv_b_bias,  dnnResourceDiffBias) , err );
        CHECK_ERR( dnnLayoutCreateFromPrimitive_F32(&lt_out_bias,    conv_b_bias,  dnnResourceDiffDst) , err );
    }
    else
    	CHECK_ERR(dnnConvolutionCreateForward_F32(       &conv_f,   attributes, dnnAlgorithmConvolutionDirect, DIM4, inputSize, outputSize, filterSize, stride, pad, dnnBorderZeros),err);
 	CHECK_ERR(dnnConvolutionCreateBackwardData_F32(  &conv_bdata,   attributes, dnnAlgorithmConvolutionDirect, DIM4, inputSize, outputSize, filterSize, stride, pad, dnnBorderZeros),err);
	CHECK_ERR(dnnConvolutionCreateBackwardFilter_F32(&conv_bfilter, attributes, dnnAlgorithmConvolutionDirect, DIM4, inputSize, outputSize, filterSize, stride, pad, dnnBorderZeros),err);

    primitives[FORWARD_INDEX]    = (long long)conv_f;
    primitives[BWD_DATA_INDEX]   = (long long)conv_bdata;
    primitives[BWD_FILTER_INDEX] = (long long)conv_bfilter;
    primitives[BDW_BIAS_INDEX]   = (long long)conv_b_bias;

	CHECK_ERR( dnnLayoutCreate_F32(&lt_in_NCHW,     DIM4, inputSize,  inputStridesNCHW),  err );
	CHECK_ERR( dnnLayoutCreate_F32(&lt_in_CHWN,     DIM4, inputSize,  inputStridesCHWN),  err );
	CHECK_ERR( dnnLayoutCreate_F32(&lt_filter,      DIM4, filterSize, filterStridesCHWN), err );
    CHECK_ERR( dnnLayoutCreate_F32(&lt_out_NCHW,    DIM4, outputSize, outputStridesNCHW), err );
    CHECK_ERR( dnnLayoutCreate_F32(&lt_out_CHWN,    DIM4, outputSize, outputStridesCHWN), err );

    CHECK_ERR( dnnLayoutCreateFromPrimitive_F32(&lt_in_f,     conv_f, dnnResourceSrc   ) , err );
	CHECK_ERR( dnnLayoutCreateFromPrimitive_F32(&lt_filter_f, conv_f, dnnResourceFilter), err );
	CHECK_ERR( dnnLayoutCreateFromPrimitive_F32(&lt_out_f,    conv_f, dnnResourceDst   ) , err );
	CHECK_ERR( dnnLayoutCreateFromPrimitive_F32(&lt_in_bdata,     conv_bdata, dnnResourceDiffSrc) , err );
	CHECK_ERR( dnnLayoutCreateFromPrimitive_F32(&lt_filter_bdata, conv_bdata, dnnResourceFilter) , err );
	CHECK_ERR( dnnLayoutCreateFromPrimitive_F32(&lt_out_bdata,    conv_bdata, dnnResourceDiffDst) , err );
	CHECK_ERR( dnnLayoutCreateFromPrimitive_F32(&lt_in_bfilter,     conv_bfilter, dnnResourceSrc) , err );
	CHECK_ERR( dnnLayoutCreateFromPrimitive_F32(&lt_filter_bfilter, conv_bfilter, dnnResourceDiffFilter) , err );
    CHECK_ERR( dnnLayoutCreateFromPrimitive_F32(&lt_out_bfilter,    conv_bfilter, dnnResourceDiffDst) , err );

    //here assume NCHW (CHWN will be transposed)
    primitives[L_I]    = (long long)lt_in_NCHW;
    primitives[L_O]    = (long long)lt_out_NCHW;
    primitives[L_W]    = (long long)lt_filter;
    primitives[L_B]    = (long long)lt_bias_CHWN;
    primitives[L_F_I]  = (long long)lt_in_f;
    primitives[L_F_O]  = (long long)lt_out_f;
    primitives[L_F_W]  = (long long)lt_filter_f;
    primitives[L_F_B]  = (long long)lt_bias_f;
    primitives[L_BD_I] = (long long)lt_in_bdata;
    primitives[L_BD_O] = (long long)lt_out_bdata;
    primitives[L_BD_W] = (long long)lt_filter_bdata;
    primitives[L_BF_I] = (long long)lt_in_bfilter;
    primitives[L_BF_O] = (long long)lt_out_bfilter;
    primitives[L_BF_W] = (long long)lt_filter_bfilter;
    primitives[L_I_CHWN] = (long long)lt_in_CHWN;
    primitives[L_O_CHWN] = (long long)lt_out_CHWN;
    primitives[L_B_B]    = (long long)lt_bias_bias;
    primitives[L_B_O]    = (long long)lt_out_bias;
    //input may have user layout (from raw image data,continuous NCHW )
    //  or maybe mkl layout (is previous mkl-based layer's output)
    dnnLayout_t lt_in_real = (dnnLayout_t)input[MKLLayout];
    if(lt_in_real==NULL) lt_in_real = lt_in_NCHW;
    //create conversion and buff if necessary
    dnnPrimitive_t cv_in_f = NULL; float * buf_in_f = NULL;
    CHECK_ERR( try_convert(&cv_in_f, &buf_in_f, lt_in_real, lt_in_f) , err );

    //create transpose if necessary
    float* newPtr = NULL;
	if (input[MKLLayout] == 0)
	{
		newPtr = (float*)malloc(inC*inH*inW*N*sizeof(float));
	}
    primitives[BUFFER_TRANS_INPUT] = (long long)newPtr;

    //save conversion and buff
    primitives[BUFFER_FORWARD_INPUT]  = (long long)buf_in_f;
    primitives[CONVERT_FORWARD_INPUT] = (long long)cv_in_f;

    //filter layout
    dnnPrimitive_t cv_filter_f = NULL; float * buf_filter_f = NULL;
    CHECK_ERR( try_convert(&cv_filter_f, &buf_filter_f, lt_filter, lt_filter_f), err );
    primitives[CONVERT_FORWARD_FILTER] = (long long)cv_filter_f;
    primitives[BUFFER_FORWARD_FILTER]  = (long long)buf_filter_f;

	//save user layout for output, and create mkl buffer
	//output always has mkl buffer and recorded in layer's primitive
	output[CPULayout] = (long long)lt_out_CHWN;
	float* buf_out_f = NULL;
    CHECK_ERR( dnnAllocateBuffer_F32((void**)(&buf_out_f), lt_out_f), err );
    primitives[BUFFER_FORWARD_OUTPUT] = (long long)buf_out_f;

    //for bias
    dnnPrimitive_t cv_bias_f = NULL; float * buf_bias_f = NULL;
    dnnPrimitive_t cv_bias_b = NULL; float * buf_bias_b = NULL;
    if (hasBias)
    {
        CHECK_ERR( try_convert(&cv_bias_f, &buf_bias_f, lt_bias_CHWN, lt_bias_f), err );
    }
    primitives[CONVERT_FORWARD_BIAS] = (long long)cv_bias_f;
    primitives[BUFFER_FORWARD_BIAS]  = (long long)buf_bias_f;

    return 0;

ERR_RETURN:

    return 1;
}