[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