[x265] [PATCH 2 of 2] pcm: print PCM statistics when csv is enabled and log level >= 3

Steve Borho steve at borho.org
Fri May 8 22:53:58 CEST 2015


On 05/08, deepthi at multicorewareinc.com wrote:
> # HG changeset patch
> # User Deepthi Nandakumar <deepthi at multicorewareinc.com>
> # Date 1431078261 -19800
> #      Fri May 08 15:14:21 2015 +0530
> # Node ID 16fbf64badb142b32b6f9ac2b279120215b8af1d
> # Parent  4203e7ac7d784a307d6d7174f69d96a86bc576c8
> pcm: print PCM statistics when csv is enabled and log level >= 3
> 
> diff -r 4203e7ac7d78 -r 16fbf64badb1 source/encoder/encoder.cpp
> --- a/source/encoder/encoder.cpp	Fri May 08 11:22:28 2015 +0530
> +++ b/source/encoder/encoder.cpp	Fri May 08 15:14:21 2015 +0530
> @@ -237,7 +237,14 @@
>                          fprintf(m_csvfpt, "RateFactor, ");
>                      fprintf(m_csvfpt, "Y PSNR, U PSNR, V PSNR, YUV PSNR, SSIM, SSIM (dB),  List 0, List 1");
>                      /* detailed performance statistics */
> -                    fprintf(m_csvfpt, ", DecideWait (ms), Row0Wait (ms), Wall time (ms), Ref Wait Wall (ms), Total CTU time (ms), Stall Time (ms), Avg WPP, Row Blocks\n");
> +                    fprintf(m_csvfpt, ", DecideWait (ms), Row0Wait (ms), Wall time (ms), Ref Wait Wall (ms), Total CTU time (ms), Stall Time (ms), Avg WPP, Row Blocks");
> +#if ENABLE_PCM
> +                    m_pcmInstance.init();
> +                    if (!m_pcmInstance.status)
> +                        fprintf(m_csvfpt, ", C0 (active) core residency, IPC, L3 Cache Hit Ratio, L2 Cache Hit Ratio\n");
> +#else
> +                    fprintf(m_csvfpt, "\n");
> +#endif
>                  }
>                  else
>                      fputs(summaryCSVHeader, m_csvfpt);
> @@ -1447,6 +1454,10 @@
>          else
>              fputs(", 1", m_csvfpt);
>          fprintf(m_csvfpt, ", %d", curEncoder->m_countRowBlocks);
> +#if ENABLE_PCM
> +        if (!m_pcmInstance.status)
> +            m_pcmInstance.printCurState(m_csvfpt);
> +#endif
>          fprintf(m_csvfpt, "\n");
>          fflush(stderr);
>      }
> @@ -1881,6 +1892,10 @@
>      }
>      else
>          m_param->rc.qgSize = p->maxCUSize;
> +#if ENABLE_PCM
> +    if (!m_param->csvfn || m_param->logLevel < X265_LOG_FRAME)
> +        x265_log(p, X265_LOG_WARNING, "PCM data collection enabled without detailed CSV logging option; will be ignored \n");
> +#endif
>  }
>  
>  void Encoder::allocAnalysis(x265_analysis_data* analysis)
> diff -r 4203e7ac7d78 -r 16fbf64badb1 source/encoder/encoder.h
> --- a/source/encoder/encoder.h	Fri May 08 11:22:28 2015 +0530
> +++ b/source/encoder/encoder.h	Fri May 08 15:14:21 2015 +0530
> @@ -30,6 +30,10 @@
>  #include "x265.h"
>  #include "nal.h"

this should go near ENABLE_PPA and ENABLE_VTUNE in common.h

> +#if ENABLE_PCM
> +#include "profile/PCM/pcm.h"
> +#endif
> +
>  struct x265_encoder {};
>  
>  namespace x265 {
> @@ -105,6 +109,7 @@
>      EncStats           m_analyzeI;
>      EncStats           m_analyzeP;
>      EncStats           m_analyzeB;
> +    PCMStats           m_pcmInstance;

this likely needs #if ENABLE_PCM wrappers

>      FILE*              m_csvfpt;
>      int64_t            m_encodeStartTime;
>  
> diff -r 4203e7ac7d78 -r 16fbf64badb1 source/profile/PCM/pcm.cpp
> --- a/source/profile/PCM/pcm.cpp	Fri May 08 11:22:28 2015 +0530
> +++ b/source/profile/PCM/pcm.cpp	Fri May 08 15:14:21 2015 +0530
> @@ -19,4 +19,39 @@
>   *
>   * This program is also available under a commercial proprietary license.
>   * For more information, contact us at license @ x265.com.
> - *****************************************************************************/
> \ No newline at end of file
> + *****************************************************************************/
> +
> +#include "pcm.h"
> +
> +namespace x265 {
> +
> +void PCMStats::init()
> +{
> +    pcm_instance = PCM::getInstance();
> +    status = pcm_instance->program();
> +    switch (status)
> +    {
> +    case PCM::Success:
> +        break;
> +    case PCM::MSRAccessDenied:
> +        printf("Access to Intel(r) Performance Counter Monitor is denied (no MSR or PCI CFG space access)\n");
> +    case PCM::PMUBusy:
> +        printf("Access to Intel(r) Performance Counter Monitor is denied (Performance Monitoring Unit is occupied by other application)\n");
> +    default:
> +        printf("Access to Intel(r) Performance Counter Monitor is denied (Unknown error)\n");
> +    }
> +    if (!status)
> +        beforeState = getSystemCounterState();
> +}
> +
> +void PCMStats::printCurState(FILE* csv)
> +{
> +    afterState = getSystemCounterState();
> +    fprintf(csv, ", %.3lf, %.3lf, %.3lf, %.3lf", getCoreCStateResidency(0, beforeState, afterState) * 100.0
> +                                               , getCoreIPC(beforeState, afterState)
> +                                               , getL3CacheHitRatio(beforeState, afterState)
> +                                               , getL2CacheHitRatio(beforeState, afterState));
> +    beforeState = afterState;
> +}
> +
> +}
> \ No newline at end of file

needs an eoln

> diff -r 4203e7ac7d78 -r 16fbf64badb1 source/profile/PCM/pcm.h
> --- a/source/profile/PCM/pcm.h	Fri May 08 11:22:28 2015 +0530
> +++ b/source/profile/PCM/pcm.h	Fri May 08 15:14:21 2015 +0530
> @@ -26,4 +26,17 @@
>  
>  #include "cpucounters.h"
>  
> +namespace x265 {
> +
> +struct PCMStats
> +{
> +    PCM* pcm_instance;
> +    PCM::ErrorCode status;
> +    SystemCounterState beforeState;
> +    SystemCounterState afterState;
> +    void init();
> +    void printCurState(FILE* csv);
> +};
> +
> +}
>  #endif
> \ No newline at end of file

ditto

FWIW: it might be better to roll these two patches together.

-- 
Steve Borho


More information about the x265-devel mailing list