14 #include <sys/types.h>
18 #define HAVE_METRIC_PER_IPNODE
21 #define MAX_THREADS 1024
27 PIN_ERROR(
"CCTLib client Pin tool to gather calling context on each instruction.\n" + KNOB_BASE::StringKnobSummary() +
"\n");
42 char* envPath = getenv(
"CCTLIB_CLIENT_OUTPUT_FILE");
46 snprintf(name,
sizeof(name),
"%s", envPath);
49 gethostname(name + strlen(name),
MAX_FILE_PATH - strlen(name));
51 sprintf(name + strlen(name),
"%d", pid);
52 cerr <<
"\n Creating log file at:" << name <<
"\n";
62 VOID
ThreadFiniFunc(THREADID threadid,
const CONTEXT* ctxt, INT32 code, VOID* v) {
63 printf(
"instructionCount is %ld\n",
mm[threadid]);
69 uint64_t* m = (uint64_t*)des;
70 uint64_t* n = (uint64_t*)
src;
79 return (uint64_t) * ((uint64_t*)
metric);
85 void** c_m = GetIPNodeMetric(
id, slot);
87 if (*c_m ==
nullptr) {
88 m = (uint64_t*)malloc(
sizeof(uint64_t));
92 m = (uint64_t*)(*c_m);
100 if (INS_IsMemoryWrite(ins))
101 INS_InsertPredicatedCall(ins, IPOINT_BEFORE, (AFUNPTR)
SimpleCCTQuery, IARG_THREAD_ID, IARG_UINT32, slot, IARG_END);
105 int main(
int argc,
char* argv[]) {
107 if (PIN_Init(argc, argv))
uint64_t computeMetricVal(void *metric)
int main(int argc, char *argv[])
void ClientInit(int argc, char *argv[])
VOID ThreadFiniFunc(THREADID threadid, const CONTEXT *ctxt, INT32 code, VOID *v)
VOID SimpleCCTQuery(THREADID id, const uint32_t slot)
void mergeFunc(void *des, void *src)
VOID InstrumentInsCallback(INS ins, VOID *v, const uint32_t slot)
VOID ThreadStartFunc(THREADID threadid, CONTEXT *ctxt, INT32 code, VOID *v)
#define INTERESTING_INS_ALL
int PinCCTLibInit(IsInterestingInsFptr isInterestingIns, FILE *logFile, CCTLibInstrumentInsCallback userCallback, VOID *userCallbackArg, BOOL doDataCentric=false)
int hpcrun_create_metric(const char *name)
int newCCT_hpcrun_write(THREADID threadid)
int init_hpcrun_format(int argc, char *argv[], void(*mergeFunc)(void *des, void *src)=nullptr, uint64_t(*computeMetricVal)(void *metric)=nullptr, bool skip=false)
ContextHandle_t GetContextHandle(const THREADID id, const uint32_t slot)