Я использую Intel Pin для динамического инструментирования многопоточных программ для обнаружения некоторых скачков данных.Я инструктирую инструкции чтения / записи памяти, чтобы собрать следы памяти во время выполнения и затем проанализировать журнал.Коллекция трассировки проста: она хранит следы памяти (включая время, идентификатор потока, адрес и т. Д.) В буфере во время выполнения и записывает его в конце.
VOID PIN_FAST_ANALYSIS_CALL RecordMemRead(unsigned int ip, unsigned int addr, THREADID tid){
PIN_GetLock(&lock,tid+1);
membuf[instCounter].tid = tid;
membuf[instCounter].ip = ip;
membuf[instCounter].addr = addr;
membuf[instCounter].op = 'R';
instCounter++;
PIN_ReleaseLock(&lock);
}
VOID PIN_FAST_ANALYSIS_CALL RecordMemWrite(unsigned int ip, unsigned int addr, THREADID tid){
// similar to RecordMemRead()
}
VOID Instruction(INS ins, VOID *v){
if(INS_IsBranchOrCall(ins))
return;
if(INS_IsStackRead(ins))
return;
if(INS_IsStackWrite(ins))
return;
if (INS_IsMemoryRead(ins)){
INS_InsertPredicatedCall(ins, IPOINT_BEFORE, (AFUNPTR)RecordMemRead, IARG_FAST_ANALYSIS_CALL, IARG_INST_PTR, IARG_MEMORYREAD_EA,
IARG_THREAD_ID, IARG_END);
}
else if(INS_IsMemoryWrite(ins)){
INS_InsertPredicatedCall(ins, IPOINT_BEFORE, (AFUNPTR)RecordMemWrite, IARG_FAST_ANALYSIS_CALL, IARG_INST_PTR, IARG_MEMORYWRITE_EA,
IARG_THREAD_ID, IARG_END);
}
}
Моя проблема - это серьезные накладные расходы времени выполнения (200x - 500x).Согласно другим работам, сбор данных трассировки должен включать только менее чем 100-кратную нагрузку.Я попытался оптимизировать его, пропустив доступ к стеку, но это не сильно помогает.Так как мои инструменты находятся на уровне детализации инструкций, регистрируется большое количество обращений.Таким образом, я думаю, что единственный способ уменьшить накладные расходы времени выполнения - это уменьшить количество обращений, которые должны быть собраны, то есть только записывать обращения к общим переменным между потоками (связанными с расой).
Могу ли я каким-то образом выяснить, какие обращения имеют к общим переменным в Pin?или есть ли другие способы уменьшить накладные расходы времени выполнения?