Exemple #1
0
void x86_cpu_dump(FILE *f)
{
	int core;
	int thread;
	
	/* General information */
	fprintf(f, "\n");
	fprintf(f, "sim.last_dump  %lld  # Cycle of last dump\n", x86_cpu->last_dump);
	fprintf(f, "sim.ipc_last_dump  %.4g  # IPC since last dump\n", x86_cpu->cycle - x86_cpu->last_dump > 0 ?
		(double) (x86_cpu->num_committed_uinst - x86_cpu->last_committed) / (x86_cpu->cycle - x86_cpu->last_dump) : 0);
	fprintf(f, "\n");

	/* Cores */
	X86_CORE_FOR_EACH
	{
		fprintf(f, "Core %d:\n", core);
		
		fprintf(f, "eventq:\n");
		x86_uop_linked_list_dump(X86_CORE.event_queue, f);
		fprintf(f, "rob:\n");
		x86_rob_dump(core, f);

		X86_THREAD_FOR_EACH
		{
			fprintf(f, "Thread %d:\n", thread);
			
			fprintf(f, "fetch queue:\n");
			x86_uop_list_dump(X86_THREAD.fetch_queue, f);
			fprintf(f, "uop queue:\n");
			x86_uop_list_dump(X86_THREAD.uop_queue, f);
			fprintf(f, "iq:\n");
			x86_uop_linked_list_dump(X86_THREAD.iq, f);
			fprintf(f, "lq:\n");
			x86_uop_linked_list_dump(X86_THREAD.lq, f);
			fprintf(f, "sq:\n");
			x86_uop_linked_list_dump(X86_THREAD.sq, f);
			x86_reg_file_dump(core, thread, f);
			if (X86_THREAD.ctx)
			{
				fprintf(f, "mapped context: %d\n", X86_THREAD.ctx->pid);
				x86_ctx_dump(X86_THREAD.ctx, f);
			}
			
			fprintf(f, "\n");
		}
	}

	/* Register last dump */
	x86_cpu->last_dump = x86_cpu->cycle;
	x86_cpu->last_committed = x86_cpu->num_committed_uinst;
}
Exemple #2
0
void X86CpuDump(Object *self, FILE *f) {
  X86Cpu *cpu = asX86Cpu(self);
  X86Core *core;
  X86Thread *thread;

  int i;
  int j;

  /* General information */
  fprintf(f, "\n");
  fprintf(f, "LastDump = %lld   ; Cycle of last dump\n", cpu->last_dump);
  fprintf(f, "IPCLastDump = %.4g   ; IPC since last dump\n",
          asTiming(cpu)->cycle - cpu->last_dump > 0
              ? (double)(cpu->num_committed_uinst - cpu->last_committed) /
                    (asTiming(cpu)->cycle - cpu->last_dump)
              : 0);
  fprintf(f, "\n");

  /* Cores */
  for (i = 0; i < x86_cpu_num_cores; i++) {
    core = cpu->cores[i];
    fprintf(f, "-------\n");
    fprintf(f, "Core %d\n", core->id);
    fprintf(f, "-------\n\n");

    fprintf(f, "Event Queue:\n");
    x86_uop_linked_list_dump(core->event_queue, f);

    fprintf(f, "Reorder Buffer:\n");
    X86CoreDumpROB(core, f);

    for (j = 0; j < x86_cpu_num_threads; j++) {
      thread = core->threads[j];

      fprintf(f, "----------------------\n");
      fprintf(f, "Thread %d (in core %d)\n", j, i);
      fprintf(f, "----------------------\n\n");

      fprintf(f, "Fetch queue:\n");
      x86_uop_list_dump(thread->fetch_queue, f);

      fprintf(f, "Uop queue:\n");
      x86_uop_list_dump(thread->uop_queue, f);

      fprintf(f, "Instruction Queue:\n");
      x86_uop_linked_list_dump(thread->iq, f);

      fprintf(f, "Load Queue:\n");
      x86_uop_linked_list_dump(thread->lq, f);

      fprintf(f, "Store Queue:\n");
      x86_uop_linked_list_dump(thread->sq, f);

      X86ThreadDumpRegFile(thread, f);
      if (thread->ctx) fprintf(f, "MappedContext = %d\n", thread->ctx->pid);

      fprintf(f, "\n");
    }
  }

  /* Register last dump */
  cpu->last_dump = asTiming(cpu)->cycle;
  cpu->last_committed = cpu->num_committed_uinst;

  /* End */
  fprintf(f, "\n\n");
}