Loading...
martin_n_marinov avatar martin_n_marinov 26 Точки

Лекция 8 - Домашното ми върви по-бавно с тредове ?

Някой измисли ли начин да подкара Homework 8, по-бързо с multithreading отколкото с monothread ? 

Аз реших да я разделя на 4 треда изчисляващи следните функции ( код ):

  1. calc_highway - функция с линейна сложност.
  2. calc_avg_connected_dist - функция с линейна сложност.
  3. calc_longest_dist - функция с квадратна сложност.
  4. 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), тогава нещата са еднакви. 

Някой знае ли защо се получава това ?

 

Тагове:
0
Linux Курсове 17/02/2016 23:22:10
hanasd avatar hanasd 3 Точки

Браво мен лично ме мързеше да имплементирам алгоритъм, но имай предвид че за многонишковото програмиране се заделя много повече оверхед виж ако искаш следните статии:

http://www.linuxquestions.org/questions/programming-9/multi-threading-slower-than-single-threading-on-dual-core-why-523364/

http://stackoverflow.com/questions/25647476/c-pthreaded-process-running-slower-than-single-thread-issue

 

Имай предивид че това е относително проста обработка на данни ако имаш повече и по-сложни функции (например калкулация за 1000 точки) многонишковото програмиране ще се отплати по-добре. Разбира се има значение дали на са виртуална машина и с колко процесора е тя.

Голяма част от задачките например биха били по-бързи ако са написани на bash :)

 

 

1
vladiant avatar vladiant 41 Точки

Също трябва да се има предвид, че Linux се грижи да няма thread starvation, а всички нишки са с еднакъв приоритет. Така от време на време системата приспива някои нишки, за да бъдат обслужени други. Това може да се промени, ако се стартират с root права (тогава може да се зададе приоритет на нишките), а заобиколният начин е да се влияе (в известни граници) чрез промяна на приоритета на процеса, асоцииран към нишката (всяка нишка е свързана с отделен процес).

 

0
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.