АОР2/К2П 2022
- Овај рок није решен. Помозите SI Wiki тако што ћете га решити.
Поправни други колоквијум 2022. године одржан је 11. јуна и трајао је 90 минута.
1. задатак
Поставка
Описати општи поступак виртуелизације уређаја. Посебно описати виртуелизацију дискова и начина на који је обављена виртуелизација прекида који стижу од ових уређаја.
Решење
2. задатак
Поставка
Потребно је оптимизовати функцију int find(register char* str1, register int len1, register char* str2, register int len2)
коришћењем уграђеног макроа void prefetch(const void *addr)
на одговарајућим местима тако да се максимално смањи број промашаја у кеш меморији. Дата функција проналази позицију низа карактера задат[sic] показивачем str2
и дужином len2
унутар низа карактера задат[sic] показивачем str1
и дужином len1
. Уколико се низ карактера задат показивачем str2
и дужином len2
не налази унутар низа карактера задат[sic] показивачем str1
и дужином len1
, резултат функције је -1. Сматрати да је len1>0
и len2>0
.
int find(register char* str1, register int len1, register char* str2, register int len2)
{
register int i;
register int j;
for (i = 0; i <= len1 - len2; i++) {
for (j = 0; j < len2; j++) {
register c1 = str1[i + j];
register c2 = str2[j];
if (c1 != c2)
break;
}
if (j == len2)
return i;
}
return -1;
}
Процесор поседује само L1 кеш меморију. Величина блока кеш меморије је 64B.
Меморијски контролер и аритметичко логичка јединица процесора имају могућност рада у паралели. Сматрати да void prefetch
враћа резултат након 5 C++ израза који користе оперативну меморију. C++ изрази који не користе оперативну меморију сматрати да не утичу значајно у времену приликом извршавања void prefetch
, тако да такве изразе треба игнорисати.