Автор Тема: Спинлок синхронизация  (Прочетена 885 пъти)

Oxy

  • Напреднали
  • *****
  • Публикации: 253
  • Distribution: Fedora / Gentoo / Debian
  • Window Manager: KDE (4.2/ 3.5)
    • Профил
    • WWW
Спинлок синхронизация
« -: Dec 04, 2011, 20:38 »
Здравейте! Спинлок е възможно решение на Проблема с критичната секция. Понеже не уча на български не съм наясно кое как се превежда затова обяснявам малко по-широко: Дадена е програма която има част, която подлежи на паралелизиране чрез спинлок. Спинлокът е реализиран по следния начин:

while( key) Swap(&lock, &key);

прието е че Swap() е атомарна инструкция с хардуерна реализация. Въпросът който не ме интересува и не мога да му намеря отговор е : Защо въпросната реализация може да доведе до намаляване на производителността при мултипроцесорна система?

gat3way

  • Напреднали
  • *****
  • Публикации: 6050
  • Relentless troll
    • Профил
    • WWW
Re: Спинлок синхронизация
« Отговор #1 -: Dec 04, 2011, 21:46 »
Сигурен ли си че въпросната реализация може да доведе до намаляване на производителността на мултипроцесорна, а не на еднопроцесорна система? Виж внимателно какво са написали - ако наистина става въпрос за многопроцесорна система и аз ще бъда доста любопитен.

Активен

"Knowledge is power" - France is Bacon

Oxy

  • Напреднали
  • *****
  • Публикации: 253
  • Distribution: Fedora / Gentoo / Debian
  • Window Manager: KDE (4.2/ 3.5)
    • Профил
    • WWW
Re: Спинлок синхронизация
« Отговор #2 -: Dec 05, 2011, 00:18 »
Ето как е зададена задачата.
A spinlock might be implemented using the following code:
while( key ) Swap(&lock, &key) ;
Why can this code exhibit poor performance on modern multiprocessor systems?

Предвид, че инструкцията е атомарна, не се налага да се забранят интеруптите(решение при не атомарни инструкции при еднопроцесорна система).

Евентуално си мисля в случай в който има повече нишки от процесори може да се получи следната ситуация: Един процесор да вземе лок върху критичната секция, и да кара другите процесори които също искат да влязат в нея да спинват и реално само 1 процесор да работи, докато другите чакат...

gat3way

  • Напреднали
  • *****
  • Публикации: 6050
  • Relentless troll
    • Профил
    • WWW
Re: Спинлок синхронизация
« Отговор #3 -: Dec 05, 2011, 00:35 »
Да ама представи си колко по-зле ще е на еднопроцесорна система (където има preemption разбира се, иначе ще цикли безкрайно). Ако един или няколко процеса чакат да се отключи, докато някой го е заключил и е бил preempt-нат преди да го отключи, сума ти timeslice-а ще бъдат похабени изцяло докато на държащият lock-а процес му се даде процесорно време да го освободи. Това е щото цикленето и atomic exchange-а не са блокиращи операции и държат процеса в running state.

Активен

"Knowledge is power" - France is Bacon