| Автор |
Съобщение |
|
Цецо
Ранг: Форумен бог
Регистриран на: Пон Сеп 27, 2004 9:22 am Мнения: 15501 Местоположение: София
|
 Оптимизиран thread safe FIFO за АРМ
Някой да е срещал нещо фрии по въпроса. Аз съм си написал някакви библиотечки, ама ми се ще да погледна и нещо направено от по-умни хора.
Търси се нещо дето да е леко като за АРМ ембедед система, да е мултитред. И да работи добре за байтове и цели думи. Скоростта е от по-критично значение от универсалността, т.е. не ми трябват C++ имплементации, свързани списъци и т.н.
_________________ "Да еба и шибаната държава" мислеше си Гошо, докато се опитваше да улучи кофата за боклук от балкона на осмия етаж.
|
| Пон Юли 14, 2014 8:00 pm |
|
 |
|
miro_atc
Ранг: Форумен бог
Регистриран на: Нед Фев 26, 2006 6:52 pm Мнения: 11266 Местоположение: Добрич
|
 Re: Оптимизиран thread safe FIFO за АРМ
конкретизарай малко повече, защото има много вариации.... Най-простият вариант е когато имаш по една нишка от всяка страна, тогава стандартния кю си бачка и нямаш нужда от арм трикове. Ако имаш по повече от една нишка на страна то най-добре да си ги синхронизираш с примитивите на ОС-а (надявам се ползваш ОС). Макар че нещо не схващам смисъла на байт кю и много нишки. Все пак ако трябва подобна щуротия спокойно може да си сложиш забрана на прекъсванията в push(). А pop() може да го направиш с екслузив достъп. И спокойно може да си го направиш в Ц++ шаблон ако искаш хем да е универсално хем бързо.
|
| Пон Юли 14, 2014 8:36 pm |
|
 |
|
Цецо
Ранг: Форумен бог
Регистриран на: Пон Сеп 27, 2004 9:22 am Мнения: 15501 Местоположение: София
|
 Re: Оптимизиран thread safe FIFO за АРМ
По една нишка е от всяка страна, търкалям плейн С, трябва ми за байтове и думи тръба. Т.е. атомични слагания и вадения.
_________________ "Да еба и шибаната държава" мислеше си Гошо, докато се опитваше да улучи кофата за боклук от балкона на осмия етаж.
|
| Вто Юли 15, 2014 10:09 am |
|
 |
|
miro_atc
Ранг: Форумен бог
Регистриран на: Нед Фев 26, 2006 6:52 pm Мнения: 11266 Местоположение: Добрич
|
 Re: Оптимизиран thread safe FIFO за АРМ
Нещо май ти е време за почивка, жегата ти идва в повече  Нямаш нужда от атомичности и други циркове... Фифото се прави с един кръгов буфер и два указателя. Единият указател се бара само от едната страна/нишка, другият само от другата. Няма как да стане инфекция, куртексите нямат толкова дълбоки кешове че да ти разбъркат нещата.
|
| Вто Юли 15, 2014 10:32 am |
|
 |
|
Цецо
Ранг: Форумен бог
Регистриран на: Пон Сеп 27, 2004 9:22 am Мнения: 15501 Местоположение: София
|
 Re: Оптимизиран thread safe FIFO за АРМ
Аз така съм го направил.  Ама някъде после в момент на временно (надявам се ) умопомрачение, съм го рационализирал и сам наврял вътре и една променлива която инкрементвам и декрементвам съответно при тъпкане и вадене. Идеята ми ... вероятно е била да забързам проверките за състоянието на тръбата. Само дето тая променлива се бара и от двете страни, а инкрементването и декрементването в рама не е атомична операция (нали така). И сега наблюдавам разни странни ефекти... Та ми се прищя да видя нещо написано от по-умни от мен. Сега ще пробвам да я разкарам въобще и да си смятам глава - опашка както си му е реда.
_________________ "Да еба и шибаната държава" мислеше си Гошо, докато се опитваше да улучи кофата за боклук от балкона на осмия етаж.
|
| Вто Юли 15, 2014 10:45 am |
|
 |
|
miro_atc
Ранг: Форумен бог
Регистриран на: Нед Фев 26, 2006 6:52 pm Мнения: 11266 Местоположение: Добрич
|
 Re: Оптимизиран thread safe FIFO за АРМ
мда.. трябва да е атомична, ама за къф си го набутваш с общата променлива не знам... Умниците ги търси за по-смислени неща;-) Иначе не помня източник, тва по ОС-вете обикновено е по-сложните варианти един към много със синхронизации ала-бала... По-скоро виж STL или учебникарски примерчета, в Ц++ обикновено ги слагат... То и аз съм правил нещо такова, макар че ти сигурно пак няма да ти хареса че е шаблон. Но точно шаблон е най-подходящ за подобни глупости, компилаторите го мачкат като прасе зрели круши  Докато кода си остава прегледен и защитен, ама като те знам по-добре да не ти обяснявам 
|
| Вто Юли 15, 2014 11:52 am |
|
 |
|
Цецо
Ранг: Форумен бог
Регистриран на: Пон Сеп 27, 2004 9:22 am Мнения: 15501 Местоположение: София
|
 Re: Оптимизиран thread safe FIFO за АРМ
Един ден като стана голям... вероятно ще мина на C++... ама още съм малък.
_________________ "Да еба и шибаната държава" мислеше си Гошо, докато се опитваше да улучи кофата за боклук от балкона на осмия етаж.
|
| Вто Юли 15, 2014 11:58 am |
|
 |
|
miro_atc
Ранг: Форумен бог
Регистриран на: Нед Фев 26, 2006 6:52 pm Мнения: 11266 Местоположение: Добрич
|
 Re: Оптимизиран thread safe FIFO за АРМ
малък, ама глупав  вместо да гониш девойките тръгнал да се мъчи с голи Ц  опс, голО Ц имах предвид, ама явно за друго съм си мислел 
|
| Вто Юли 15, 2014 12:07 pm |
|
 |
|
Цецо
Ранг: Форумен бог
Регистриран на: Пон Сеп 27, 2004 9:22 am Мнения: 15501 Местоположение: София
|
 Re: Оптимизиран thread safe FIFO за АРМ
Мен викаш жегата ме мъчи, а....
_________________ "Да еба и шибаната държава" мислеше си Гошо, докато се опитваше да улучи кофата за боклук от балкона на осмия етаж.
|
| Вто Юли 15, 2014 3:19 pm |
|
 |
|
gicho
Ранг: Форумен бог
Регистриран на: Пон Мар 13, 2006 1:59 pm Мнения: 3867 Местоположение: Габрово
|
 Re: Оптимизиран thread safe FIFO за АРМ
Забрана на прекъсванията от двете страни докато пипаш общи неща е гарантирано решение. Предполагам че имаш нужда да защитиш няколко инструкции само, така че си на 6.
|
| Вто Юли 15, 2014 9:11 pm |
|
 |
|
Цецо
Ранг: Форумен бог
Регистриран на: Пон Сеп 27, 2004 9:22 am Мнения: 15501 Местоположение: София
|
 Re: Оптимизиран thread safe FIFO за АРМ
А оправих го, просто махнах паразитната променлива. Забрана на прекъсвания не се налага, в най-простия случай двата процеса наистина няма какво да делят.
_________________ "Да еба и шибаната държава" мислеше си Гошо, докато се опитваше да улучи кофата за боклук от балкона на осмия етаж.
|
| Вто Юли 15, 2014 10:40 pm |
|
 |
|
gicho
Ранг: Форумен бог
Регистриран на: Пон Мар 13, 2006 1:59 pm Мнения: 3867 Местоположение: Габрово
|
 Re: Оптимизиран thread safe FIFO за АРМ
Без кода е трудно да се разсъждава, но се сещам за две ситуации, в които "си делят": - проверка за препълване от страна на пишещия - проверка за празен от страна на четящия В тези случаи трябва да се сравняват двата пойнтъра, което е потенциална работа със "споделени" променливи?
|
| Сря Юли 16, 2014 10:36 am |
|
 |
|
miro_atc
Ранг: Форумен бог
Регистриран на: Нед Фев 26, 2006 6:52 pm Мнения: 11266 Местоположение: Добрич
|
 Re: Оптимизиран thread safe FIFO за АРМ
gicho, май и на теб ти е време да разрешиш "прекъсванията" за по една бира  Имаш два указателя - in & out, които във всеки един момент от времето разделят буфера на пълна и празна част. Пишештата страна може да маже в празната част колкото и когато си поиска. Никой друг не би трябвало да се интересува какво става там. В момента в който се запише нова стойност, пишештият мести единия указател. Местенето е просто запис, който на почти всички архитектури е атомична операция. Демек останалите до един момент виждат "празно" и изведнъж се появява нова стойстоност и празното е намаляло. При четенето е по същия начин, четящият може да си чете колкото иска от пълната част и като се начете си мести неговия указател и всички останали изведнъж виждат как празната част се е увеличила.
|
| Сря Юли 16, 2014 11:06 am |
|
 |
|
bateAz
Ранг: Форумен бог
Регистриран на: Нед Сеп 26, 2004 4:11 pm Мнения: 3750 Местоположение: София
|
 Re: Оптимизиран thread safe FIFO за АРМ
Зависи от идеологията. Някои реализации на FIFO при запълване не спират да пълнят, ами презаписват на местото на старите данни ( и естествено, пипат и указателя за четене ). Идеята е, ако за известно време спреш да четеш, да имаш последните, а не първите данни. Там проблеми ще има.
|
| Сря Юли 16, 2014 11:32 am |
|
 |
|
Цецо
Ранг: Форумен бог
Регистриран на: Пон Сеп 27, 2004 9:22 am Мнения: 15501 Местоположение: София
|
 Re: Оптимизиран thread safe FIFO за АРМ
Точно.
_________________ "Да еба и шибаната държава" мислеше си Гошо, докато се опитваше да улучи кофата за боклук от балкона на осмия етаж.
|
| Сря Юли 16, 2014 12:07 pm |
|
|