Лекция 8 - Домашното ми върви по-бавно с тредове ?
Някой измисли ли начин да подкара Homework 8, по-бързо с multithreading отколкото с monothread ?
Аз реших да я разделя на 4 треда изчисляващи следните функции ( код ):
- calc_highway - функция с линейна сложност.
- calc_avg_connected_dist - функция с линейна сложност.
- calc_longest_dist - функция с квадратна сложност.
- calc_shortest_dist - функция с квадратна сложност.
Когато викна join губя повече време отколкото когато ползвам 1 тред. Нещата не седят по-различно и с по-голям брои входни данни. При по-големи стойности, само calc_longest_dist и calc_shortest_dist бавят нещата, тъй че сравнявам 1 тред срещу 2 треда. Когато погледна system monitor-a, както очаквах - две от ядрата работят на max, но разликата е нулева или дори върви по-бавно.
Реших да тествам с по-прост пример ( код ). В този пример, това което ме учудва най-много, е че ако тествам пярво test2(multi) след това test1(mono), тогва test2 се изпълнява 2 пъти по-бързо, но ако тества първо test1(mono) след това test2(multi), тогава нещата са еднакви.
Някой знае ли защо се получава това ?