Execution ports homework

This commit is contained in:
Abdelrahman Said 2024-04-13 13:56:29 +01:00
parent 2cb6f1beb6
commit 5c97a99839
2 changed files with 80 additions and 0 deletions

View File

@ -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();

View File

@ -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: