- 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;
}
};
Хотя чувствуется что-то тут не так.
По идее ни в чем. У захвата спинлока и цаса должна быть почти одинаковая производительность. Но здесь есть и тонкость - для реализации атомарного инкремента на 32 битке для sizeof(T) == 4 и на 64 битке для sizeof(T) == 8 цас не нужен, достаточно xadd.
Поэтому, имхо, стоит юзать готовые атомики, оптимизнутые под разные платформы, а не городить свой велосипед...
какой шустрый. не забываем префикс "lock". без лока на разных корках одного проца может работать и будет - но на разных процах и/или разных numa нодах уже не гарантируется.
> Поэтому, имхо, стоит юзать готовые атомики, оптимизнутые под разные платформы, а не городить свой велосипед...
их нужно юзать именно по тому что синхрониция штука нетривиальная и платформенно-специфична (и на безграмотной "проц == платформа" далеко не укатишь).
и атомарность делать на спинлоках это что по воробьям из пушки: почти все процы уже достаточно давно поддерживают атомарные операции.
Ок, забыл про него написать. Но xadd хоть с lock хоть без lock это ни в коем случае не CAS. CAS'ы это cmpxchg и его большой брат.
lock xadd - fetch-and-add. Собственно настоящий атомарный инкремент - возвращает старое значение ячейки и увеличивает ее на заданное число. Всегда прокатывает с первого раза.
Да там куча проблем.
>>на его основе можно запиливать списки и очереди
Что само по себе нетривиальная алгоритмическая задача. Надо еще доказать что твой алгоритм корректно работает. Потому интел и запилила в новые процы TSX. Удобство написания как с лочками, а скорость как с CAS.
Кстати а куда из сишко/кресто тредов пропали все школьники, и питушыный царь в частности?
Не похоже. Там STM и это уже круто.
Нравится то что интел не увеличивает тупо количество ядер (хотя при текущий транзисторный и тепловой бюджет смело позволяют делать 8-ядерники, если выкинуть нахер видеоядро, то по цене выйдет так же), но и пытается облегчить программистам использование этих самых ядер.
Ибо сейчас многопоточность, это вам не AssParallel написать.
Раньше как-то проще с этим было: обычно процессор в среднем за 75$ (в разное время по разному от 50 [Duron 1400 был который разлочивался в атлон] до 100$) можно было разогнать до скорости старшей модели и выше и перекрыть с лихвой недостаток кеша. Сейчас так нельзя - ядра не добавишь. Приходится брать за 200$.
Да и раньше они наоборот делали. На дешевых виртуализацию резали.
Но я всё-равно K не собирался брать.
т.к. дешевле выйдет, а задач не стоит?
К в нашем бобруйске стоит рублей на 300-500 дороже, чем не К. Поэтому смысл брать не К? Ну вот разве за порезанную виртуализацию обидно.
UPD: Упс, ошибся, посмотрел на и5 ;) А и7 с индексом К стоят на 1000-1300 дороже.
брать K = не только переплатить 1000р, но и взять соответствующую плату под него (Z87 = 200$+) + нормальный кулер (nh-d14 = 100$)
ps - ну и нормальный надёжный БП, да
Ну и да, под хасвелл материнки действительно пока дороги. Даже не на разгонных чипсетах zXX.
#прямосейчас моя материнка под санди на newegg стоит 179$, а два поколения уже минуло
Угу. Всё-равно они при разгоне до 5 становятся шибко горячие. Смысла нету. У меня стойкая привычка, еще с тех времен когда денег на железо не хватало никогда не покупать топовое - быстро устаревает. Лоченые можно поднять до 3.5-4 это ненамного хуже.
Если только не любитель поразгонять ради разгона.
Удивляет другое. Зачем интел сделала версию 128 метрами L4 (у меня когда-то оперативы было меньше и всё летало) и продает только для ультрамобильных процов.
Полагаю в десктопе был бы определенный спрос.
с блядским интелом и санди бридж всё ещё актуален
> шибко горячие
всё зависит от СО
я вот домой подумываю об 2х http://bit.ly/14stzJ8
Это не бляский интел виноват, а амд - не могут догнать и сделать конкуретный проц. Потому все хейтеры "амд-маст-дай интел форева" за что боролись, на то и напоролись.
>всё зависит от СО
Какой смысл дрочится чтоб добавить 20% скорости итак шустрому камню? Куда это девать? Собирать крестопроекты? Компилить генту?
Тарас смотрит на нас с презрением.
Мне новые ядра интересны исключительно упомянутым TSX, наборами инструкций и отличным power-managment => низким энергопотреблением.
дома - да хоть тот же лайтрум
были бы ресурсы, а куда их деть всегда найдется
низкое энергопотребление нужно ноутбукам для автономности, ну и чтобы яйца не жарить, а компу плюс минус 50 ватт - да пофиг
а дрочиться не надо, не знаю откуда эта байка про сложность разгона
потратишь час на подбор стабильных максимальных границ, и оно работает потом годами и особого обслуживания не требует (ну если воздушное охлаждение - то надо иногда пылесосить, да)
Уже и 4-х ядерники вышли, а счастья все нет.
Относитесь к этому проще, вот как Тарас - философски. Если что-то тупит - это в первую очередь означает делаю что-то не так. И только потом думать о железе.
20% разгон не сделает жизнь проще и быстрее. Профит от алгоритмических улучшений составляет разы или десятки раз.
>лайтрум
Вот, например, говнофирма адобе. Её продукты надо запретить на законодательном уровне.
Зачем, если это обычная DRAM?
Необычная, а на кристалле и в несколько раз быстрее DDR-3, как и положено кешу.
>потратишь час на подбор стабильных максимальных границ
Ага. Час. А поднятия напряжения? А перезагрузуки? А то что prime95 или linpack может упасть через сутки.
Дело не в сложности разгона. Зачем мудохаться - покупать кулер, K-версию, искать материнку, и иметь печку в корпусе, ради лишних 10-15%?
Если б 50%-70%, как в былые времена то я бы понял.
я написал реальные цифры
перезагрузка (если уж так получилось) займет копейки - уефи биос + нормальный хард под винду (например, ссд - но меня тогда жаба задавила и я сделал всего лишь рейд-0)
сейчас вообще ПО есть из-под винды с ползунками, не надо в биосе красноглазить
печка в корпусе - это ж не сервер, ей-богу, 90% времени цпу работает как и положено - 1.6ГГц, и поэтому потребляет 25Вт
зато когда надо - крестокомпиляция занимает на 25% меньше
и да, при стресс-тесте linx из верхней крышки корпуса выдувается еле теплый ветерок
при окончании 100% нагрузки температура _мгновенно_ падает до стандартной 35°
а кулер не слышно в обоих режимах
блин, о вкусе устриц стоит спорить только с тем, кто их ел...
И тогда это ощутимо. В комнате где ищещь прохлады от летней погоды становится жарко.
>хочется гонять стресс-тесты сутками? - мне нет
Если гонять стресс-тест 10 минут, тогда есть риск получить нестабильное железо - это хуже, хуже всего в общем. У меня был случай когда процессор со временем уменьшал свой частотный потолок. И после джвух лет переставал проходить стресс-тесты на стабильной ранее частоте.
20% от суток - часа 4, не меньше
А тепловыделение растет пропорционально частоте * квадрат напряжения. Холодные интеловские процы превращаются в 120 ваттные печки. Рост энергопотребления 50-60%.
То есть чем ближе к потолку тем больше расчет ватт/гц.
Лучше купить два дешевых НЕ K проца и материнки с боксовым кулером и ускорится в 2 раза.
ускориться
навскидку - ну, допустим +10к рублей за сетап (лень считать...)
потребление +100 ватт = 3,15р/квт-ч * 0.1 квт * 24 часа = 8 рублей в сутки = 3000р в год
что там, кстати, современные видюхи видео не помогают кодировать?
(нескромный вопрос - это хобби? или ты и есть тот самый добрый самаритянин, что заботливо рипает блюреи на рутрекер для меня?)
Совсем скоро рипы блюреев будут в джва-три раза меньше.
Но злобные модерасты опять будут ставить палки в колеса как было с AVC. Кстати интересно было бы услышать что по этому поводу думает Мицгол.
> современные видюхи видео не помогают кодировать?
Это несбыточная мечта и популярная тема у маркетологов. Кодеки быстрые, да. Но какчество у них очень плохое. У интела самая лучшая реализация, очень-очень быстро, и качественней остальных подобных творений.
Но сжимает хуже того же x264 --fast, где-то на уровне xVid. Рипы на рутрекерах жмутся гораздо более сильными настройками.
В прошлом году сделали opencl патч, но он во-первых нестабильный, во-вторых, он частенько случаях замедляет работу - слишком большие задержки передать работу в карту и забрать обратно результат. Профит от него около 10%.
Потому что крайне сложно написать такой многопоточный код, который будет синхронно считать кусок работы на GPU и успевать вовремя подавать в CPU.
Тут кстати и помогает пресловутый L4 - видуха и проц обмениваюся через него, а не медленную память.
А амд пилит чудо-технологию NUMA - то есть память карты и основная будут в одном адресном пространстве - что теоретически должно помочь при кодинге таких вот алгоритмов.
Она быстрее просто из-за того, что на кристале.
В несколько раз быстрее - это детский сад.
hierarchical temporal memory?
Если имелась ввиду Hardware transactional memory, то да.