- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
#include <pthread.h>
template<class T = long long>
class AtomicCounter
{
public:
explicit AtomicCounter( T value = 0 ): _count( value ) { pthread_spin_init( &_lock, PTHREAD_PROCESS_PRIVATE );};
~AtomicCounter() { pthread_spin_destroy( &_lock ); };
T operator++(int) volatile { return interlockFetchAndAdd( 1 ); };
T operator--(int) volatile { return interlockFetchAndAdd( -1 ); };
T operator() () volatile { return interlockFetchAndAdd( 0 ); }
private:
volatile T _count;
pthread_spinlock_t _lock;
T interlockFetchAndAdd( int delta ) volatile
{
T x = 0;
pthread_spin_lock( &_lock );
x = _count;
_count += delta;
pthread_spin_unlock(&_lock);
return x;
}
};
someone 26.07.2013 12:14 # −1
bormand 26.07.2013 13:17 # 0
3.14159265 26.07.2013 14:20 # −1
Хотя чувствуется что-то тут не так.
bormand 26.07.2013 15:01 # +1
По идее ни в чем. У захвата спинлока и цаса должна быть почти одинаковая производительность. Но здесь есть и тонкость - для реализации атомарного инкремента на 32 битке для sizeof(T) == 4 и на 64 битке для sizeof(T) == 8 цас не нужен, достаточно xadd.
Поэтому, имхо, стоит юзать готовые атомики, оптимизнутые под разные платформы, а не городить свой велосипед...
Dummy00001 26.07.2013 18:18 # +6
какой шустрый. не забываем префикс "lock". без лока на разных корках одного проца может работать и будет - но на разных процах и/или разных numa нодах уже не гарантируется.
> Поэтому, имхо, стоит юзать готовые атомики, оптимизнутые под разные платформы, а не городить свой велосипед...
их нужно юзать именно по тому что синхрониция штука нетривиальная и платформенно-специфична (и на безграмотной "проц == платформа" далеко не укатишь).
и атомарность делать на спинлоках это что по воробьям из пушки: почти все процы уже достаточно давно поддерживают атомарные операции.
anonimb84a2f6fd141 26.07.2013 18:21 # −1
Dummy00001 26.07.2013 18:47 # +11
anonimb84a2f6fd141 30.07.2013 02:44 # 0
bormand 26.07.2013 19:29 # 0
Ок, забыл про него написать. Но xadd хоть с lock хоть без lock это ни в коем случае не CAS. CAS'ы это cmpxchg и его большой брат.
Krutsiatus 26.07.2013 19:30 # 0
bormand 26.07.2013 19:36 # 0
lock xadd - fetch-and-add. Собственно настоящий атомарный инкремент - возвращает старое значение ячейки и увеличивает ее на заданное число. Всегда прокатывает с первого раза.
3.14159265 26.07.2013 20:24 # +2
Да там куча проблем.
>>на его основе можно запиливать списки и очереди
Что само по себе нетривиальная алгоритмическая задача. Надо еще доказать что твой алгоритм корректно работает. Потому интел и запилила в новые процы TSX. Удобство написания как с лочками, а скорость как с CAS.
Кстати а куда из сишко/кресто тредов пропали все школьники, и питушыный царь в частности?
LispGovno 26.07.2013 20:57 # 0
3.14159265 26.07.2013 21:09 # +1
LispGovno 26.07.2013 21:58 # 0
3.14159265 28.07.2013 19:09 # 0
Не похоже. Там STM и это уже круто.
Нравится то что интел не увеличивает тупо количество ядер (хотя при текущий транзисторный и тепловой бюджет смело позволяют делать 8-ядерники, если выкинуть нахер видеоядро, то по цене выйдет так же), но и пытается облегчить программистам использование этих самых ядер.
Ибо сейчас многопоточность, это вам не AssParallel написать.
bormand 28.07.2013 20:21 # +2
3.14159265 28.07.2013 21:27 # 0
Раньше как-то проще с этим было: обычно процессор в среднем за 75$ (в разное время по разному от 50 [Duron 1400 был который разлочивался в атлон] до 100$) можно было разогнать до скорости старшей модели и выше и перекрыть с лихвой недостаток кеша. Сейчас так нельзя - ядра не добавишь. Приходится брать за 200$.
Да и раньше они наоборот делали. На дешевых виртуализацию резали.
Но я всё-равно K не собирался брать.
defecate-plusplus 28.07.2013 21:46 # 0
т.к. дешевле выйдет, а задач не стоит?
bormand 28.07.2013 22:02 # 0
К в нашем бобруйске стоит рублей на 300-500 дороже, чем не К. Поэтому смысл брать не К? Ну вот разве за порезанную виртуализацию обидно.
UPD: Упс, ошибся, посмотрел на и5 ;) А и7 с индексом К стоят на 1000-1300 дороже.
defecate-plusplus 28.07.2013 22:15 # +1
брать K = не только переплатить 1000р, но и взять соответствующую плату под него (Z87 = 200$+) + нормальный кулер (nh-d14 = 100$)
ps - ну и нормальный надёжный БП, да
bormand 28.07.2013 22:48 # 0
Ну и да, под хасвелл материнки действительно пока дороги. Даже не на разгонных чипсетах zXX.
defecate-plusplus 28.07.2013 23:01 # 0
#прямосейчас моя материнка под санди на newegg стоит 179$, а два поколения уже минуло
3.14159265 29.07.2013 13:47 # 0
Угу. Всё-равно они при разгоне до 5 становятся шибко горячие. Смысла нету. У меня стойкая привычка, еще с тех времен когда денег на железо не хватало никогда не покупать топовое - быстро устаревает. Лоченые можно поднять до 3.5-4 это ненамного хуже.
Если только не любитель поразгонять ради разгона.
Удивляет другое. Зачем интел сделала версию 128 метрами L4 (у меня когда-то оперативы было меньше и всё летало) и продает только для ультрамобильных процов.
Полагаю в десктопе был бы определенный спрос.
defecate-plusplus 29.07.2013 14:09 # +1
с блядским интелом и санди бридж всё ещё актуален
> шибко горячие
всё зависит от СО
я вот домой подумываю об 2х http://bit.ly/14stzJ8
3.14159265 29.07.2013 14:15 # 0
Это не бляский интел виноват, а амд - не могут догнать и сделать конкуретный проц. Потому все хейтеры "амд-маст-дай интел форева" за что боролись, на то и напоролись.
>всё зависит от СО
Какой смысл дрочится чтоб добавить 20% скорости итак шустрому камню? Куда это девать? Собирать крестопроекты? Компилить генту?
Тарас смотрит на нас с презрением.
Мне новые ядра интересны исключительно упомянутым TSX, наборами инструкций и отличным power-managment => низким энергопотреблением.
defecate-plusplus 29.07.2013 14:53 # 0
дома - да хоть тот же лайтрум
были бы ресурсы, а куда их деть всегда найдется
низкое энергопотребление нужно ноутбукам для автономности, ну и чтобы яйца не жарить, а компу плюс минус 50 ватт - да пофиг
а дрочиться не надо, не знаю откуда эта байка про сложность разгона
потратишь час на подбор стабильных максимальных границ, и оно работает потом годами и особого обслуживания не требует (ну если воздушное охлаждение - то надо иногда пылесосить, да)
3.14159265 29.07.2013 16:35 # +2
Уже и 4-х ядерники вышли, а счастья все нет.
Относитесь к этому проще, вот как Тарас - философски. Если что-то тупит - это в первую очередь означает делаю что-то не так. И только потом думать о железе.
20% разгон не сделает жизнь проще и быстрее. Профит от алгоритмических улучшений составляет разы или десятки раз.
>лайтрум
Вот, например, говнофирма адобе. Её продукты надо запретить на законодательном уровне.
LispGovno 29.07.2013 15:19 # 0
Зачем, если это обычная DRAM?
3.14159265 29.07.2013 16:10 # +2
Необычная, а на кристалле и в несколько раз быстрее DDR-3, как и положено кешу.
>потратишь час на подбор стабильных максимальных границ
Ага. Час. А поднятия напряжения? А перезагрузуки? А то что prime95 или linpack может упасть через сутки.
Дело не в сложности разгона. Зачем мудохаться - покупать кулер, K-версию, искать материнку, и иметь печку в корпусе, ради лишних 10-15%?
Если б 50%-70%, как в былые времена то я бы понял.
defecate-plusplus 29.07.2013 16:42 # +1
я написал реальные цифры
перезагрузка (если уж так получилось) займет копейки - уефи биос + нормальный хард под винду (например, ссд - но меня тогда жаба задавила и я сделал всего лишь рейд-0)
сейчас вообще ПО есть из-под винды с ползунками, не надо в биосе красноглазить
печка в корпусе - это ж не сервер, ей-богу, 90% времени цпу работает как и положено - 1.6ГГц, и поэтому потребляет 25Вт
зато когда надо - крестокомпиляция занимает на 25% меньше
и да, при стресс-тесте linx из верхней крышки корпуса выдувается еле теплый ветерок
при окончании 100% нагрузки температура _мгновенно_ падает до стандартной 35°
а кулер не слышно в обоих режимах
блин, о вкусе устриц стоит спорить только с тем, кто их ел...
3.14159265 29.07.2013 16:49 # 0
И тогда это ощутимо. В комнате где ищещь прохлады от летней погоды становится жарко.
>хочется гонять стресс-тесты сутками? - мне нет
Если гонять стресс-тест 10 минут, тогда есть риск получить нестабильное железо - это хуже, хуже всего в общем. У меня был случай когда процессор со временем уменьшал свой частотный потолок. И после джвух лет переставал проходить стресс-тесты на стабильной ранее частоте.
defecate-plusplus 29.07.2013 16:51 # 0
20% от суток - часа 4, не меньше
3.14159265 29.07.2013 17:19 # 0
А тепловыделение растет пропорционально частоте * квадрат напряжения. Холодные интеловские процы превращаются в 120 ваттные печки. Рост энергопотребления 50-60%.
То есть чем ближе к потолку тем больше расчет ватт/гц.
Лучше купить два дешевых НЕ K проца и материнки с боксовым кулером и ускорится в 2 раза.
3.14159265 29.07.2013 17:24 # 0
ускориться
defecate-plusplus 29.07.2013 17:44 # 0
навскидку - ну, допустим +10к рублей за сетап (лень считать...)
потребление +100 ватт = 3,15р/квт-ч * 0.1 квт * 24 часа = 8 рублей в сутки = 3000р в год
что там, кстати, современные видюхи видео не помогают кодировать?
(нескромный вопрос - это хобби? или ты и есть тот самый добрый самаритянин, что заботливо рипает блюреи на рутрекер для меня?)
3.14159265 29.07.2013 20:31 # +1
Совсем скоро рипы блюреев будут в джва-три раза меньше.
Но злобные модерасты опять будут ставить палки в колеса как было с AVC. Кстати интересно было бы услышать что по этому поводу думает Мицгол.
> современные видюхи видео не помогают кодировать?
Это несбыточная мечта и популярная тема у маркетологов. Кодеки быстрые, да. Но какчество у них очень плохое. У интела самая лучшая реализация, очень-очень быстро, и качественней остальных подобных творений.
Но сжимает хуже того же x264 --fast, где-то на уровне xVid. Рипы на рутрекерах жмутся гораздо более сильными настройками.
В прошлом году сделали opencl патч, но он во-первых нестабильный, во-вторых, он частенько случаях замедляет работу - слишком большие задержки передать работу в карту и забрать обратно результат. Профит от него около 10%.
Потому что крайне сложно написать такой многопоточный код, который будет синхронно считать кусок работы на GPU и успевать вовремя подавать в CPU.
Тут кстати и помогает пресловутый L4 - видуха и проц обмениваюся через него, а не медленную память.
А амд пилит чудо-технологию NUMA - то есть память карты и основная будут в одном адресном пространстве - что теоретически должно помочь при кодинге таких вот алгоритмов.
LispGovno 29.07.2013 20:26 # 0
Она быстрее просто из-за того, что на кристале.
В несколько раз быстрее - это детский сад.
Stertor 28.07.2013 21:30 # +1
LispGovno 29.07.2013 20:23 # 0
Stertor 29.07.2013 21:09 # 0
anonimb84a2f6fd141 30.07.2013 02:47 # 0
guest 30.07.2013 10:29 # 0
guest 30.07.2013 10:29 # 0
guest 30.07.2013 10:49 # 0
guest 30.07.2013 11:59 # −3
guest 30.07.2013 11:59 # −3
inkanus-gray 30.07.2013 12:41 # +3
3.14159265 30.07.2013 13:32 # 0
guest 30.07.2013 14:59 # 0
3.14159265 29.07.2013 13:42 # 0
hierarchical temporal memory?
Если имелась ввиду Hardware transactional memory, то да.