Hi,all:
I see an IMPORTANT NOTE in the attached cmd file like below:
/* ------------------------------------------ */
/* IMPORTANT NOTE: Splitting external memory */
/* into sections shown, grouping of functions */
/* and ordering inside groups is a crucial */
/* requirement for performance. Alteration */
/* in the above will lead to severe cache */
/* penalties and hence results in performace */
/* degradation. */
/* ------------------------------------------ */
So my questions are:
1.
What does above IMPORTANT NOTE mean? Would you give me some explanation or details to
show what's the optimizing tricks which used in cmd file ?
2.
I noted that cmd file is written like below :
.text:H264HPVENC_TI_cSectfracpelP
{
/* FracPelB */
.= align(0x8000); /* align to 32kb */
*(.text:H264HPVENC_TI_MV_fractionalPel)
*(.text:H264HPVENC_TI_subPelRefinement)
*(.text:H264HPVENC_TI_sad_halfpel)
*(.text:H264HPVENC_TI_sad_quartpel)
}
Why cmd file can be written like this ?
What are relationships between H264HPVENC_TI_cSectfracpelP and
H264HPVENC_TI_MV_fractionalPel ,H264HPVENC_TI_subPelRefinement,
H264HPVENC_TI_sad_halfpel,H264HPVENC_TI_sad_quartpel?
Are these four functions below subfunction of H264HPVENC_TI_cSectfracpelP ?
H264HPVENC_TI_MV_fractionalPel ,H264HPVENC_TI_subPelRefinement, H264HPVENC_TI_sad_halfpel,H264HPVENC_TI_sad_quartpel
3.
Continue with Q2, How much performance would be improved if cmd file is written as kind of
show in Q2 ?
Why can that kind of way cmd file is written by in questions 2 improve function's performance ?
Thanks!
/* ===========================================================================*/
/* Copyright (c) 2012 Texas Instruments, Incorporated. */
/* All Rights Reserved. */
/* ===========================================================================*/
/*============================================================================*/
/* Partial Linker Command File for H264HP encoder */
/* Purpose: To have hassel free integration of algorithm in system, system */
/* integrator should not worry about managing multiple sections of code and */
/* data. */
/* Define code section(s) with naming convention: .text:H264HPVENC_TI_cSectx */
/* Define data section(s) with naming convention: .const:H264HPVENC_TI_dSectx*/
/* Define const section(s) with naming convention: .far:H264HPVENC_TI_uSectx */
/* - Hide all symbols, export XDAIS functions, create namespaced sections */
/* - Create sections with optimised cache relative placement */
/*============================================================================*/
/* Make relocatable object */
-r
/* Hide all symbols in this partial link */
-h
/* Make XDAIS Functions and Tables Symbols Globally Visible */
-g IH264HPVENC_PARAMS
-g H264HPVENC_TI_DYNAMICPARAMS
-g H264HPVENC_TI_IALG /* module ID */
-g H264HPVENC_TI_activate /* activate */
-g H264HPVENC_TI_alloc /* algAlloc */
-g H264HPVENC_TI_deactivate /* deactivate */
-g H264HPVENC_TI_free /* free */
-g H264HPVENC_TI_initObj /* init */
-g H264HPVENC_TI_numAlloc /* numAlloc (NULL => IALG_DEFMEMRECS) */
-g H264HPVENC_TI_encode /* H264HP encode */
-g H264HPVENC_TI_control /* H264HP encode's control */
-g H264HPVENC_TI_init
-g H264HPVENC_TI_exit
-g H264HPVENC_TI_IH264HPVENC
-g H264HPVENC_TI_getResources
-g H264HPVENC_TI_numResources
-g H264HPVENC_TI_initResources
-g H264HPVENC_TI_reInitResources
-g H264HPVENC_TI_deInitResources
-g H264HPVENC_TI_activateRes
-g H264HPVENC_TI_activateAllRes
-g H264HPVENC_TI_deactivateRes
-g H264HPVENC_TI_deactivateAllRes
-g H264HPVENC_TI_IRES
SECTIONS
{
/* ------------------------------------------ */
/* IMPORTANT NOTE: Splitting external memory */
/* into sections shown, grouping of functions */
/* and ordering inside groups is a crucial */
/* requirement for performance. Alteration */
/* in the above will lead to severe cache */
/* penalties and hence results in performace */
/* degradation. */
/* ------------------------------------------ */
.const
{
*(.const)
}
.text:H264HPVENC_TI_cSectfracpelB
{
/* FracPelB */
.= align(0x8000); /* align to 32kb */
*(.text:H264HPVENC_TI_MV_fractionalPel_B)
*(.text:H264HPVENC_TI_subPelRefinement_B)
*(.text:H264HPVENC_TI_sad_halfpel_B)
*(.text:H264HPVENC_TI_sad_quartpel_B)
}
.text:H264HPVENC_TI_cSectfracpelP
{
/* FracPelB */
.= align(0x8000); /* align to 32kb */
*(.text:H264HPVENC_TI_MV_fractionalPel)
*(.text:H264HPVENC_TI_subPelRefinement)
*(.text:H264HPVENC_TI_sad_halfpel)
*(.text:H264HPVENC_TI_sad_quartpel)
}
.text:H264HPVENC_TI_cSectProcIntra8x8
{
/* Intra8x8 */
.= align(0x8000); /* align to 32kb */
*(.text:H264HPVENC_TI_process_intra8x8mb)
*(.text:H264HPVENC_TI_predgen_errorgen_Intra8x8)
*(.text:H264HPVENC_TI_filter_intra8x8_recon)
*(.text:H264HPVENC_TI_trans_quant_Intra8x8)
*(.text:H264HPVENC_TI_forward8x8)
*(.text:H264HPVENC_TI_iquant_Intra8x8)
*(.text:H264HPVENC_TI_idct_addpred_Intra8x8)
*(.text:H264HPVENC_TI_inverse8x8)
}
.text:H264HPVENC_TI_cSectChromaRecon
{
/* ChromaRecon */
.= align(0x8000); /* align to 32kb */
*(.text:H264HPVENC_TI_GenChromaErrDC)
*(.text:H264HPVENC_TI_GenChromaErrHor)
*(.text:H264HPVENC_TI_GenChromaErrVer)
*(.text:H264HPVENC_TI_trans_quant_chroma)
*(.text:H264HPVENC_TI_rle_iq_chroma)
}
.text:H264HPVENC_TI_cSectpreMEframe
{
/* preMEframe */
.= align(0x8000); /* align to 32kb */
*(.text:H264HPVENC_TI_pre_meFrame)
*(.text:H264HPVENC_TI_mad_hx16_skip2)
*(.text:H264HPVENC_TI_find_best_sad2_avoid_partition)
*(.text:H264HPVENC_TI_square_search)
*(.text:H264HPVENC_TI_mad_NxN_Skip)
*(.text:H264HPVENC_TI_find_best_sad2)
*(.text:H264HPVENC_TI_PrepareSearchList1)
*(.text:H264HPVENC_TI_CalcSadList1)
*(.text:H264HPVENC_TI_CollectSadList1)
}
}