ПредишенСледващото

Проблем с интервюто: продължи

Но аз се чудех дали мога да хвана този ефект в действителност. Реалността, както обикновено, се оказа малко по-сложно теория, но мозъкът е победен отново в мозъка и компютър мач: този код в основата (внимателно подбрана) ще произвежда в синхронен режим (690 +/- 1%) НЧ / (-Dasync = невярно) съобщение и асинхронен (560 +/- 8%) NS / съобщение.

Бих искал да се очертае да се разбере какво чужденец казва какво се случва там?

Ние трябва да вземем някои конвенционалната памет интензивно задача и се раздели на две фази, всяка от които се отнася до неговите парчета от данни. Взех парче на данни под формата на достатъчно голям (сравним с размер L1) масива на двойно []. Сама по себе си "фаза обработка съобщение" се състои от няколко четене / запис на клетките на масив. "Multiple" е избран да бъде 128, 128 и тези клетки са избрани от целия спектър на псевдослучаен алгоритъм (тип LCG: I = (A * I) мод С). На първо място, първата фаза на може да се справи масив, а след това втората фаза прави точно същото нещо на нея - и така за всяко съобщение, от които легионът 1 милион във всеки кръг. Да, това, което диктува на кода:
Интересен въпрос №1: ако псевдо skakanie масива се заменя с тунели с фиксирано подреждане, разликата в производителността е практически изчезва. По-скоро, дори и с малко, почти до точката на грешка, той започва да спечели синхронен версия. Защо така? №2 интересен въпрос: ако сте задали настрана от разгледаните възможни - какви други ефекти може да даде предимство ", паралелизирано" версия на сериала? Послепис Да, между другото - ние (Deutsche Bank) наемат хора. Изглежда, че 3-4 работни места, сега сме отворени. Можете да пишете директно към мен, и - и аз имам много интересни идеи за интервюто там :)

В отговор на въпрос No 1: включване на предварителното извличане. Факт е, че ако ние се случи да се скитат през масив, тогава вероятността за кеш за изпускане в зависимост от размера на кеша.
Ако предварително извличане е включен, кеш Мис почти отсъства.

Да, точно така. Какво се случва, ако промените размера на стъпката - например, ако вземете една стъпка 1, 8, 256?

Мисля, че ако вземете стъпка 1 и 8, след което включете предварително извличане, защото в този случай, всеки път ще се зареди същия или на следващия кеш линия, а в случая 256 не се включва, тъй като няма да се стартират следващия кеш линия, както и с пропуск. Въпреки това, аз съм чувал, че има prefetchery че признава постоянна терена, така че всичко зависи от конкретната желязо.

Що се отнася до втория въпрос, не мога да си представя ситуация, в която вторият процесор се върти нишка, която разделя ресурси с нашата задача.

Да, по принцип правилно. Това е просто prefetcher на Intel открива сканиране на паметта с постоянна стъпка до 2048 байта (мисля). Така че в етапа до 256 * двойно предварително извличане да работи.

Но много интересен въпрос (този път аз не знам отговора все още) защо някои стъпки (например 73, 81, 97, 105, 113, 121, 127, 129) асинхронен версия на работата в пъти по-бавно (в 5- 8) от останалите? Едновременно същия вариант изглежда да има такъв ефект демонстрира.

Подкрепете проекта - споделете линка, благодаря!