Execution ports homework
This commit is contained in:
		@@ -27,10 +27,12 @@ extern "C" void rat_add(u64 size);
 | 
			
		||||
extern "C" void rat_mov_add(u64 size);
 | 
			
		||||
extern "C" void read_1(char *buffer, u64 size);
 | 
			
		||||
extern "C" void read_2(char *buffer, u64 size);
 | 
			
		||||
extern "C" void read_3(char *buffer, u64 size);
 | 
			
		||||
extern "C" void read_4(char *buffer, u64 size);
 | 
			
		||||
extern "C" void read_8(char *buffer, u64 size);
 | 
			
		||||
extern "C" void write_1(char *buffer, u64 size);
 | 
			
		||||
extern "C" void write_2(char *buffer, u64 size);
 | 
			
		||||
extern "C" void write_3(char *buffer, u64 size);
 | 
			
		||||
extern "C" void write_4(char *buffer, u64 size);
 | 
			
		||||
extern "C" void write_8(char *buffer, u64 size);
 | 
			
		||||
extern "C" void read_1x2_low(char *buffer, u64 size);
 | 
			
		||||
@@ -60,10 +62,12 @@ void test_rat_add(reptester *tester, alloc_type type);
 | 
			
		||||
void test_rat_mov_add(reptester *tester, alloc_type type);
 | 
			
		||||
void test_read_1(reptester *tester, alloc_type type);
 | 
			
		||||
void test_read_2(reptester *tester, alloc_type type);
 | 
			
		||||
void test_read_3(reptester *tester, alloc_type type);
 | 
			
		||||
void test_read_4(reptester *tester, alloc_type type);
 | 
			
		||||
void test_read_8(reptester *tester, alloc_type type);
 | 
			
		||||
void test_write_1(reptester *tester, alloc_type type);
 | 
			
		||||
void test_write_2(reptester *tester, alloc_type type);
 | 
			
		||||
void test_write_3(reptester *tester, alloc_type type);
 | 
			
		||||
void test_write_4(reptester *tester, alloc_type type);
 | 
			
		||||
void test_write_8(reptester *tester, alloc_type type);
 | 
			
		||||
void test_read_1x2_low(reptester *tester, alloc_type type);
 | 
			
		||||
@@ -151,10 +155,12 @@ int main(int argc, char *argv[]) {
 | 
			
		||||
      // {{"RAT MOV ADD", "RAT MOV ADD WITH MALLOC"}, test_rat_mov_add},
 | 
			
		||||
      // {{"READ 1", "READ 1 WITH MALLOC"}, test_read_1},
 | 
			
		||||
      // {{"READ 2", "READ 2 WITH MALLOC"}, test_read_2},
 | 
			
		||||
      // {{"READ 3", "READ 3 WITH MALLOC"}, test_read_3},
 | 
			
		||||
      // {{"READ 4", "READ 4 WITH MALLOC"}, test_read_4},
 | 
			
		||||
      // {{"READ 8", "READ 8 WITH MALLOC"}, test_read_8},
 | 
			
		||||
      // {{"WRITE 1", "WRITE 1 WITH MALLOC"}, test_write_1},
 | 
			
		||||
      // {{"WRITE 2", "WRITE 2 WITH MALLOC"}, test_write_2},
 | 
			
		||||
      // {{"WRITE 3", "WRITE 3 WITH MALLOC"}, test_write_3},
 | 
			
		||||
      // {{"WRITE 4", "WRITE 4 WITH MALLOC"}, test_write_4},
 | 
			
		||||
      // {{"WRITE 8", "WRITE 8 WITH MALLOC"}, test_write_8},
 | 
			
		||||
      {{"READ 1x2 LOW", "READ 1x2 LOW WITH MALLOC"}, test_read_1x2_low},
 | 
			
		||||
@@ -732,6 +738,31 @@ void test_read_2(reptester *tester, alloc_type type) {
 | 
			
		||||
  handle_free(tester, type);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void test_read_3(reptester *tester, alloc_type type) {
 | 
			
		||||
  u64 start = read_cpu_timer();
 | 
			
		||||
  u64 fault_count_start = page_fault_count();
 | 
			
		||||
 | 
			
		||||
  handle_alloc(tester, type);
 | 
			
		||||
 | 
			
		||||
  u64 total_size = tester->params.read_size * tester->params.read_count;
 | 
			
		||||
 | 
			
		||||
  read_3(tester->params.buffer, total_size);
 | 
			
		||||
 | 
			
		||||
  u64 fault_count_end = page_fault_count();
 | 
			
		||||
  u64 end = read_cpu_timer();
 | 
			
		||||
 | 
			
		||||
  u64 read_time = end - start;
 | 
			
		||||
  u64 page_faults = fault_count_end - fault_count_start;
 | 
			
		||||
 | 
			
		||||
  tester->results = {
 | 
			
		||||
      total_size,
 | 
			
		||||
      read_time,
 | 
			
		||||
      page_faults,
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
  handle_free(tester, type);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void test_read_4(reptester *tester, alloc_type type) {
 | 
			
		||||
  u64 start = read_cpu_timer();
 | 
			
		||||
  u64 fault_count_start = page_fault_count();
 | 
			
		||||
@@ -832,6 +863,31 @@ void test_write_2(reptester *tester, alloc_type type) {
 | 
			
		||||
  handle_free(tester, type);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void test_write_3(reptester *tester, alloc_type type) {
 | 
			
		||||
  u64 start = read_cpu_timer();
 | 
			
		||||
  u64 fault_count_start = page_fault_count();
 | 
			
		||||
 | 
			
		||||
  handle_alloc(tester, type);
 | 
			
		||||
 | 
			
		||||
  u64 total_size = tester->params.read_size * tester->params.read_count;
 | 
			
		||||
 | 
			
		||||
  write_3(tester->params.buffer, total_size);
 | 
			
		||||
 | 
			
		||||
  u64 fault_count_end = page_fault_count();
 | 
			
		||||
  u64 end = read_cpu_timer();
 | 
			
		||||
 | 
			
		||||
  u64 read_time = end - start;
 | 
			
		||||
  u64 page_faults = fault_count_end - fault_count_start;
 | 
			
		||||
 | 
			
		||||
  tester->results = {
 | 
			
		||||
      total_size,
 | 
			
		||||
      read_time,
 | 
			
		||||
      page_faults,
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
  handle_free(tester, type);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void test_write_4(reptester *tester, alloc_type type) {
 | 
			
		||||
  u64 start = read_cpu_timer();
 | 
			
		||||
  u64 fault_count_start = page_fault_count();
 | 
			
		||||
 
 | 
			
		||||
@@ -16,10 +16,12 @@ global rat_add
 | 
			
		||||
global rat_mov_add
 | 
			
		||||
global read_1
 | 
			
		||||
global read_2
 | 
			
		||||
global read_3
 | 
			
		||||
global read_4
 | 
			
		||||
global read_8
 | 
			
		||||
global write_1
 | 
			
		||||
global write_2
 | 
			
		||||
global write_3
 | 
			
		||||
global write_4
 | 
			
		||||
global write_8
 | 
			
		||||
global read_1x2_low
 | 
			
		||||
@@ -248,6 +250,17 @@ read_2:
 | 
			
		||||
 | 
			
		||||
	ret
 | 
			
		||||
 | 
			
		||||
read_3:
 | 
			
		||||
	align 64
 | 
			
		||||
	.loop:
 | 
			
		||||
		%rep 3
 | 
			
		||||
		mov rax, [rdi]
 | 
			
		||||
		%endrep
 | 
			
		||||
		sub rsi, 3
 | 
			
		||||
		jnle .loop
 | 
			
		||||
 | 
			
		||||
	ret
 | 
			
		||||
 | 
			
		||||
read_4:
 | 
			
		||||
	align 64
 | 
			
		||||
	.loop:
 | 
			
		||||
@@ -290,6 +303,17 @@ write_2:
 | 
			
		||||
 | 
			
		||||
	ret
 | 
			
		||||
 | 
			
		||||
write_3:
 | 
			
		||||
	align 64
 | 
			
		||||
	.loop:
 | 
			
		||||
		%rep 3
 | 
			
		||||
		mov QWORD [rdi], 0
 | 
			
		||||
		%endrep
 | 
			
		||||
		sub rsi, 3
 | 
			
		||||
		jnle .loop
 | 
			
		||||
 | 
			
		||||
	ret
 | 
			
		||||
 | 
			
		||||
write_4:
 | 
			
		||||
	align 64
 | 
			
		||||
	.loop:
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user