本文整理汇总了C++中CONTROL::PinPointsActive方法的典型用法代码示例。如果您正苦于以下问题:C++ CONTROL::PinPointsActive方法的具体用法?C++ CONTROL::PinPointsActive怎么用?C++ CONTROL::PinPointsActive使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类CONTROL
的用法示例。
在下文中一共展示了CONTROL::PinPointsActive方法的3个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: Handler
VOID Handler(CONTROL_EVENT ev, VOID * v, CONTEXT * ctxt, VOID * ip, THREADID tid)
{
std::cerr << "tid: " << dec << tid << " ip: 0x" << hex << ip;
// get line info on current instruction
INT32 linenum = 0;
string filename;
PIN_LockClient();
PIN_GetSourceLocation((ADDRINT)ip, NULL, &linenum, &filename);
PIN_UnlockClient();
if(filename != "")
{
std::cerr << " ( " << filename << ":" << dec << linenum << " )";
}
std::cerr << dec << " Inst. Count " << icount.Count(tid) << " ";
#if defined(TARGET_IA32) || defined(TARGET_IA32E)
std::cerr << " [ with REP iterations " << icount.CountWithREP() << "] ";
#endif
switch(ev)
{
case CONTROL_START:
std::cerr << "Start" << endl;
if(control.PinPointsActive())
{
std::cerr << "PinPoint: " << control.CurrentPp(tid) << " PhaseNo: " << control.CurrentPhase(tid) << endl;
}
break;
case CONTROL_STOP:
std::cerr << "Stop" << endl;
if(control.PinPointsActive())
{
std::cerr << "PinPoint: " << control.CurrentPp(tid) << endl;
}
break;
default:
ASSERTX(false);
break;
}
}
示例2: Handler
VOID Handler(CONTROL_EVENT ev, VOID * v, CONTEXT * ctxt, VOID * ip, THREADID tid)
{
std::cout << "ip: " << ip << " Instructions: " << icount.Count() << " ";
switch(ev)
{
case CONTROL_START:
std::cout << "Start" << endl;
ppinfo.startMispredicts = bimodal.Mispredicts();
ppinfo.startIcount = icount.Count();
if(control.PinPointsActive())
{
std::cout << "PinPoint: " << control.CurrentPp() << endl;
UINT32 pp = control.CurrentPp();
ASSERTX( pp <= MAXPP);
ppinfo.ppstats[pp].ppWeightTimesThousand = control.CurrentPpWeightTimesThousand();
ppinfo.currentpp = pp;
}
break;
case CONTROL_STOP:
std::cout << "Stop" << endl;
if(control.PinPointsActive())
{
std::cout << "PinPoint: " << control.CurrentPp() << endl;
UINT64 mispredicts = bimodal.Mispredicts() - ppinfo.startMispredicts;
UINT64 instructions = icount.Count() - ppinfo.startIcount;
UINT32 pp = ppinfo.currentpp;
ppinfo.ppstats[pp].ppMispredicts = mispredicts;
ppinfo.ppstats[pp].ppInstructions = instructions;
}
break;
default:
ASSERTX(false);
break;
}
}
示例3: Fini
LOCALFUN VOID Fini(int n, void *v)
{
*outfile << endl;
double whole_MPKI = 1000.0 * (double)bimodal.Mispredicts()/icount.Count();
*outfile << "Whole-program MPKI = " << whole_MPKI << dec << endl;
if (control.PinPointsActive())
{
UINT32 NumPp = control.NumPp();
double predicted_MPKI = 0.0;
*outfile << "PP #," << " %Weight," << " MPKI" << endl;
for (UINT32 p = 1; p <= NumPp ; p++)
{
double weight = (double) ppinfo.ppstats[p].ppWeightTimesThousand/1000.0;
double mpki = (double)ppinfo.ppstats[p].ppMispredicts*1000/ppinfo.ppstats[p].ppInstructions;
*outfile << dec << p << ", " << weight << ", " << mpki << endl;
predicted_MPKI += (double) weight*mpki/100.0;
}
*outfile << "Predicted MPKI = " << predicted_MPKI << dec << endl;
}
}