LINUX.ORG.RU

Избранные сообщения userd

такой опасный java.u.c.l.ReentrantLock

Форум — Development

Берегите ноги господа:

package wayerr.testlock;

import java.util.concurrent.locks.ReentrantLock;

public class TestLock {

    private static final ReentrantLock lock = new ReentrantLock();

    public static void main(String[] args) throws Exception {
        Thread thread = new Thread(() -> {
            try {
                recursion();
            } catch(java.lang.StackOverflowError e) {
                // it expected
            }
        });
        thread.start();
        thread.join();
        System.out.println("Lock is locked: " + lock.isLocked());
        if(lock.tryLock()) {
            try {
                System.out.println("OK");
            } finally {
                lock.unlock();
            }
        } else {
            System.out.println("FAIL");
        }
    }

    static final void recursion() {
        lock.lock();
        try {
            recursion();
        } finally {
            lock.unlock();
        }
    }
}

В _этом_ тесте всегда выдает:

Lock is locked: true
FAIL

Чсх, на продакшене искать причину крайне весело, особенно с учетом того что в реальном коде он проявляться будет не всегда. Если метод recursion - не пустой то вероятность что стек кончится внутри lock - уменьшается.

зы. с каждым таким фокусом все больше любишь старый добрый synchronized .

ps. это починили в 9-ке: http://bugs.java.com/view_bug.do?bug_id=8046936 хотя известно с 11 года

 

Deleted
()

128 bit CPU

Форум — Talks

Они есть? Или когда появятся? Кто что думает?
И есть ли уже какие нибудь ОС для таких процев?

unonimous
()

Почему может зависнуть вызов localtime()?

Форум — Development

Есть такая замечательная софтина xrdp. И есть в ней такой замечательный код логгирования:

enum logReturns DEFAULT_CC
log_message(const enum logLevels lvl, const char *msg, ...)
{
    char buff[LOG_BUFFER_SIZE + 31]; /* 19 (datetime) 4 (space+cr+lf+\0) */
    va_list ap;
    int len = 0;
    enum logReturns rv = LOG_STARTUP_OK;
    int writereply = 0;
    time_t now_t;
    struct tm *now;

    if (g_staticLogConfig == NULL)
    {
        g_writeln("The log reference is NULL - log not initialized properly");
        return LOG_ERROR_NO_CFG;
    }

    if (0 > g_staticLogConfig->fd && g_staticLogConfig->enable_syslog == 0)
    {
        return LOG_ERROR_FILE_NOT_OPEN;
    }

    now_t = time(&now_t);
    now = localtime(&now_t);

Так вот, ИНОГДА, при неизвестных обстоятельствах, когда одновременно открывается много сессий, вызов now = localtime(&now_t); наглухо зависает. При этом bt в gdb показывает следующее:

(gdb) bt
#0  __lll_lock_wait_private () at ../nptl/sysdeps/unix/sysv/linux/x86_64/lowlevellock.S:95
#1  0x00007f8a100bbabc in _L_lock_2480 () from /lib/x86_64-linux-gnu/libc.so.6
#2  0x00007f8a100bb8f7 in __tz_convert (timer=0x7f8a103c9ee0 <tzset_lock>, use_localtime=1, tp=0x7f8a103ccde0 <_tmbuf>) at tzset.c:627
#3  0x00007f8a10a1441b in log_message (lvl=LOG_LEVEL_INFO, msg=0x7f8a10a1b180 "An established connection closed to endpoint: %s") at log.c:556
#4  0x00007f8a10a1532d in g_tcp_close (sck=9) at os_calls.c:678
#5  0x0000000000405976 in session_start_fork (width=1024, height=768, bpp=24, username=0x7f8a08004a30 "xxx", 
    password=0x7f8a08004a60 "xxx", data=140230816451248, type=1 '\001', domain=0x0, program=0x0, directory=0x0, 
    client_ip=0x7f8a08004a80 "123.0.0.123:59517 - socket: 9") at session.c:523
#6  0x0000000000406bc0 in session_sync_start () at session.c:907
#7  0x00000000004041a5 in sesman_main_loop () at sesman.c:100
#8  0x0000000000404a84 in main (argc=1, argv=0x7fff8cb123d8) at sesman.c:393
(gdb) 

Из-за чего это может быть (сразу скажу, что код в этом месте не многопоточный, хотя форкается куча процессов)?

Система - Ubuntu 14.04. xrdp - 0.9 из git master.

UPD:

(gdb) info threads 
  Id   Target Id         Frame 
* 1    Thread 0x7f891182f740 (LWP 13555) "xrdp-sesman" __lll_lock_wait_private () at ../nptl/sysdeps/unix/sysv/linux/x86_64/lowlevellock.S:95
(gdb) 

 ,

asaw
()

Новый фундамент интерфейса, всплывающие окна, тонущие двери, мастерская идей

Форум — Talks

Инновационный интерфейс, новая корневая идея, всплывающие окна, тонущие двери, убегающие стенки, конкурирующие звёзды, толкающие шары

Приглашаю в творческю мастерскую идей интерфейса

Есть обширное рабочее пространство. Одни окна лежат поверх других. Есть обычные координаты xгоризонталь и yвертикаль. Также есть zглубина. Слишком глубокие окна тонут и сворачиваются в иконку нижнего моря панели. Слишком близкие окна конкурируют с другими близкими окнами, конкуренты представляются как звёзды в верхней панели небе.

Например я пишу в чате, рисую картину, и играю в сапёра. Все эти окна топовые, они в самом вершу, поэтому это звёзды, звёзды конкурируют, это разные задачи как разные рабочие столы.

Передо мной круглая дверь около изображения, на ней надпись размытие. Я постучал в дверь. Из неё вышли две двери, размыть гаусово, размыть пиксельно, дверь из которой они вышли вывернулась на изнанку и утонула.

Я стучу в дверь размыть гаусово и за ней начинает размываться картинка. Я достаю картинку из за двери, но не даю утонуть этой двери, поэтому изменения оригинальной картинки влияет на размытую версию.

Я листаю каталоги информация загружается и стенки убегают. Ограниченность оперативки не позволяет мне разогнать все стенки, я какбы в пузыре стенок.

Я захожу в виртуальную машину через дверь и закрываю эту дверь изнутри, мне не мещают другие элементы я полностью в контексте.

Я трогаю шар под определённым вектором и вызываю причину его качения, ура я сделал необративное действие, это шаротрон.

Но я до этого ясно видел последствия трогания шара в этом векторе, потому что я представлял дальнейшие касания. Это как всё равно как нажать на кнопку.

Прошу не придираться к фантастичности и другому. А приглашаю в мастерскую перлов во имя новых идей !!

Перемещено tazhate из development

 граф интерфейс,

masloed
()

Задачи на программировние/математику

Форум — General

Собственно, усиленно пытаюсь устроиться на работу программистом Python, C/C++.

При этом опыта нет и учусь на третьем курсе по направлению «Электроника и Наноэлектроника».

Но к чему я все это - было бы отлично увидеть задачки, которые дают на собеседованиях, - я, конечно, посмотрел здесь, но может местный народ подскажет что-то тоже.

 , ,

Planet
()

Какие нужные фичи HTTP считаются самыми тяжёлыми в реализации?

Форум — Development

На реализации каких фич HTTP/1.1 разработчики веб-серверов едят кактуса больше всего? multipart? chunked?

 

hlamotron
()

Как писать на C в 2016 году

Форум — Development

Интересная статейка: https://matt.sh/howto-c

PS: царя скастуйте кто-нибудь, пусть выскажет своё икспертное мнение.

 

Oxdeadbeef
()

Go vs Cpp для REST API

Форум — Development

Вобщем дело следующее. У нашего небольшого проекта, RES API - это дикая мешанина рубей и пистонов (даже, ЕМНИП, где-то и похапешное что-то завалялось). Вобщем решили мы это дело упорядочить, даже нашли «херакла», который разгребет эту авгиеву конюшню. И тут у нас начался разброд и шатание. Что выбрать в роли основного языка? По C++ я не чемпион, так, любитель. Напарник вроде рубит в C++ но на нем он только приложения лабал - с серверной частью он не очень уверен. Тут третий знакомый начал пиарить Go - вот прям ничего лучше для веб-сервиса - нету. Решили прикинуть плюсы и минусы обоих кандидатов. И что-то получается, что Go имеет абсолютно те же минусы что и C++, в принципе как и любой другой компилируемый язык. Фичи Go (channels и goroutine) можно и в Cpp состряпать если нужно. Ну а если коснуться кол-ва библиотек и средств разработки - получается для микросервисной архитектуры С++ заруливает Go в несколько оборотов.

Вобщем вопрос. Что мы могли упустить в предварительном анализе? Почему так много, вроде неглупых, людей пиарят Go как супертулзу? Или всему виной net/http из Go? Есть ли у C++ какие либо похожие фрэймворки? Пусть даже без всяких парсеров в json-ы и тому подобных.

Кстати, шутки-шутками, а go память жрет нереально.

 , ,

ioway
()

Медведев предложил принять кодекс поведения в интернете

Форум — Talks

Премьер-министр Дмитрий Медведев предлагает принять кодекс поведения в интернете в форме мягкого права. Такое предложение он озвучил незадолго до своего визита в Китай на Всемирную конференцию по управлению интернетом, передаёт агентство ТАСС.

«Очевидно, что, пока ещё не поздно, необходимо не допустить криминализации интернета, гарантировать соблюдение прав человека в цифровой сфере, — сказал премьер-министр. — Сделать это в условиях отсутствия полноценной международно-правовой базы сотрудничества в сфере информационной безопасности крайне сложно, поэтому первым шагом в создании международной системы безопасности в этой области могло бы стать принятие кодекса или правил поведения в форме мягкого права».

Для справки. «Мягкое право» — в международной практике термин, означающий рекомендательные нормы. Появление этого термина было обусловлено принятием Генеральной Ассамблеей ООН большого количества резолюций, носящих согласно Уставу ООН рекомендательный характер (за исключением резолюций по внутриорганизационным вопросам ООН и финансово-бюджетным вопросам) и не являющихся нормами международного права. (Большой юридический словарь)

Таким образом, принятый в форме мягкого права кодекс будет необязателен к исполнению. Но, как заметил выше Дмитрий Медведев, это лишь «первый шаг».

«Основную идею этой инициативы — предотвращение конфликтов и агрессии в информационном пространстве, сохранение его мирным и свободным — поддерживает абсолютное большинство государств, — сказал Медведев. — Этот факт подтверждает, что мы двигаемся в правильном направлении».

dendron:

За последние годы мы узнали что правительствам можно:
— содержать армию ботов
— взламывать компы
— заказывать DDoS-атаки
— осуществлять политическую цензуру
— перепрошивать сетевое оборудование шпионским ПО
— делать подставное оборудование для кражи данных
— запрещать шифрование
— запрещать анонимность
— запрещать мессенджеры
— делать фишинговые сайты для кражи паролей
— заказывать вирусы для саботажа индустриального оборудования
— распространять откровенную ложь и фальсификации

Я ничего не забыл? И эти господа хотят учить нас как себя вести в интернете?

 ,

StReLoK
()

Есть ли читабельная замена регекспам или препроцессор из вмеяемых правил в регекспы?

Форум — Development

Собственно суть в том, что хочется похожего функционала, только в виде последовательности вменяемых правил, а не «s/\/\/||/\?\\$%^@\?tygi/\*.[*-2]\HU\xwh8w\\n/||h9b03/\g» (примерно так выглядит чужой регексп).

Желательно в виде библиотек для явы, пхп (какашка, но иногда надо) и питона.

 , , ,

AnyGov_security
()

Запуск Xorg после обновления намертво вешает систему

Форум — Desktop

Дано:

  • Debian 7 oldstable (!!)
  • Видео от Intel (!)

Система не использовалась несколько месяцев. Сначала загрузилась нормально, никаких проблем не возникло. Сделал safe-upgrade, перезагрузился и что получается? При попытке стартовать lightdm|startx все виснет намертво, Ctrl+Alt+FX не реагирует + машина даже перестает пинговаться (!) по сети. Сначала грешил на железо, переткнул диск в другую систему тоже с Intel - результат один и тот же. Если загрузиться с nomodeset X стартует, но с неродным разрешением экрана. Без nomodeset машина нормально работатает до попытки запуска X.

Что это братие?

 , , , ,

trancefer
()

Опубликованы C++ Core Guidelines

Форум — Development

Бьерн Страуструп и Герб Саттер опубликовали в открытом доступе объемный документ, содержащий основные принципы разработки на современном С++. Авторы надеются, что следование данным принципам позволит разработчикам эффективно использовать язык и писать безопасный и поддерживаемый код.

C++ Core Guidelines: https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md/

 ,

nonimous
()

Как отучить ребёнка от игр и привить любовь к линуксу?

Форум — Talks

Есть один ребёнок, который приходя со школы домой садится за компьютер и выпадает из жизни. Знаю, что от привычек трудно избавиться, привычки нужно замещать чем-то другим.

Не хочется, чтобы целью всей жизни ребёнка были ачивки, квесты, новые уровни и всего, что существует лишь в вымышленном мире, и не несёт никакой реальной пользы, никаких полезных навыков и умений. Не хочу такого.

И быть врагом ребёнку не хочу, ставить на контроль, ограничивать его, отбирать девайсы... Хочу, чтобы ребёнок сам сделал правильное решение и выбрал что-то получше, чем самореализовывать себя через видеоигры.

Помню себя. У меня просто был слабый компьтер, P166, на котором даже фильмы не посмотреть, но учиться тоже не хотелось, а посему я с головой погрузился в веб-программирование: это не абстрактная математика, а ты реально что-то делаешь и тут-же получаешь результат, если что не так — сам виноват, а не потому что учитель сказал «неправильно».

Конечно хочется дать ребёнку лучшее, но на самом деле, зачем, если Celeron'а хватит для редактирования документов? Если ребёнок не захочет учиться, то показать ему какие-то скриптовые языки, что тоже мол, выполняешь команду и получаешь результат, думаешь над кодом, развиваешь логику, все дела... И интересно и с пользой, во всяком случае хоть что-то будет уметь. А не только «баффать».

В общем, как считаете, если ребёнок не хочет учиться, а посвятить себя чему-то более интересному, может стоит ему пойти на встречу? Не отобрать компьютер, а даунгрейднуть, чтобы не ерундой в играх занимался, а код писал в свободное от школы время. Подарить ему на день рождения гитару, может музицирование понравится.

У меня классическое «у нынешнего поколения нет будущего» — не хочу испортить чадо, но и не хочу ему перечить. Надо как-то по-хитрому наставить на путь истинный, а в конце концов, показать линукс...

 ,

Spoofing
()

vim плагины для С++ разрабоки

Форум — Development

Уважаемые С++ программисты, программеры, кодеры и родственные души.

Если вы работаете в vim, какие плагины вы при этом используете?

Поделитесь, пожалуйста, своими комплектами vim плагинов для C++ разработки.

Спасибо!

 ,

Kroz
()

Годных музыкальных исполнителей с малой популярностью тред.

Форум — Talks

Предлагаю поделиться названиями годных исполнителей, желательно без особо большой популярности (так вероятность открытия нового исполнителя выше). Жанр любой.


  • 65 Days of Static (математический рок)
  • Jack Wood (русская группа, солистка поёт на английском и, что мне нравится, сильно вкладывается в своё дело, жанры: гаражный рок, готический рок, протопанк, блюз)
  • The Algorithm (электронная музыка, прогрессивный метал)

 ,

Deleted
()

Наушники для плеера

Форум — Talks

Подарили плеер Fiio X1, теперь слушаю только лослесс винил-рипы на затычках за 300р. Посоветуйте закрытые (важно, чтоб не мешать) наушники, чтоб закрывали все ухо и чтоб в Pink Floyd Echoes было слышно все. Тыщ за 3-6. В магазине пробовал Sony XB950 - даже понравилось, но низких многовато. На сенхайзерах 180 все чисто, но такое ощущение, что низких совсем нет.

 , , ,

sid350
()

Хочу посмотреть фильм. Поиск названия

Форум — Talks

Всем привет!
Время видео кассет. Там из мужика сделали «микроба на летательном аппарате» и запустили его в человека за каким-то важным делом. Он летает в «кишках» и по радио переговаривается с друзьями которые его туда всунули. Там еще вроде женщина была. Смотрел в юном возврасте ничего не помню, помню что впечатлило
)) никто не знает ?

 

ethx
()

Помогите вычислить сопротивление

Форум — Science & Engineering

Всем привет.

Помню в школе вычисляли сопростивление цепи описанной ниже. Но никак не могу вспонить как. Мучает уже который год. Помогите, пожалуйста!

  --------| R4 |---------
  |                     |
--+--| R1 |--+--| R2 |--+--| R3 |--+--
             |                     |  
             --------| R5 |---------

 , , ,

Kroz
()

Производительность; илитный запил оптимальных реализаций и основы матчасти.

Форум — Development

Поглядел я тут на пацанов и увидел прогресс в их глазах. Поэтому я решил вести тут свой бложик, в котором я буду толкать матчасть, разбирать/разрушать всякие мифы и легенды, а так же их обсуждать с пацанами. Банить меня не надо - тут всё будет очень культурно.

Это будет формат для самых маленьких, где я буду показывать как что-то пилится по-пацаночке. Его задача - на примерах пересказать штеудмануал тем, кому лень его читать, но кто очень любит спорить про код, перфоманс и матчасть. Ну и просто интересные наблюдения.

Изначально я хотел написать про то: что такое бесплатные вычисления на примере is_range() + сумма елементов массива, но тут выявилась смешная особенность, поэтому пока без is_range().

Начнём с простого - сумма елементов(float) массива. Как написать её быстро? Обычный крестопоц сделает так:

auto summ = accumulate(begin(vec), end(vec), 0.)

Этот код выдаёт 5.6GB/s(мы всё бенчим в л1д 32килобайта массив). Казалось бы, если бы мы слушали всяких «гуру», которые нам говорят: accumulate() - оптимизирован, «ты что умнее создатели stl"а?», «конпелятор умнее тебе - сам всё делает оптимально», «руками что-то делать слишком сложно и не нужно» - то мы бы там и остались с этими 5.6ГБ, но мы пойдём дальше и поймём почему так, и является ли это тем, что намн ужно.

Но посмотрев на код - он не векторизован:

	addq	$4, %rdx
	vcvtss2sd	-4(%rdx), %xmm2, %xmm2
	vaddsd	%xmm2, %xmm1, %xmm1

Почему? Патамучто это основная флоатпроблема: Он не ассоциативен - флоат не имеет в себе точных представлений всех чисел входящих в диапазон его «представления» т.е. порядкопроблемы.

Поэтому конпелятор НЕ ВЕКТОРИЗУЕТ флоат по умолчанию, ну никак. Даже такую банальщину.

Для решения этих проблем - есть ключик -funsafe-math-optimizations, который входит в -ffast-math, который кладёт на точность при вычислениях. Добавив его мы получаем уже 44.9GB/s.

Но теперь мы получаем ещё одну проблему - надо думать: «как бэ сунуть эту ключик не повредив там, где этот ключик не нужен».

Поэтому ноцанам, которые хотят быстро и не хоятт рандомных жоп из-за тупости конпелятора - пишут всё руками. Допустим на той же сишке это пишется так:

double memadd_autovec(buf_t buf) { //5.609465GB/s, либо 44.969652GB/s с ffast-math
  float * it = buf_begin(buf), * end = buf_end(buf), summ = 0.;
  do {
    summ += *it++;
  } while(it != end);
  return summ;
}

double hsumf(__v8sf v) {
  return (v[0] + v[1] + v[2] + v[3] + v[4] + v[5] + v[6] + v[7]);
}

double memadd_vec(buf_t buf) { //45.652002GB/s и класть на ffast-math
  __v8sf * it = buf_begin(buf), * end = buf_end(buf), summ = {};
  do {
    summ += *it++;
  } while(it != end);
  return hsumf(summ);
}

Т.е. разницы никакой нет, кроме нужной нам реализации горизантального сложение вектора. Когда я говорил пацану: «векторную сишку для написания быстрого кода юзать намного проще, чем плюсы» - поцан нипонимэ, да и любые пацаны скажут - ну дак с -ffast-math оба выдают по 45гигов - нахрен эта сишка нужна?

А вот зачем:

double memadd(buf_t buf) { //132.878440GB/s
  __v8sf * it = buf_begin(buf), * end = buf_end(buf), summ = {};
  do {
    summ += *it++;summ += *it++;summ += *it++;summ += *it++;
  } while(it != end);
  return hsumf(summ);
}

Это называется пацанский анролл копипастой, а вот заставить конпелятор нормально что-то разанролить очень сложно.

Если бы мы слушали всяких «гуру», которые нам вещают: «анрол говно и не нужен» - мы бы так и седели с 45-ю гигами, а так мы сидим с 132.878440GB/s. Т.е. анролл нам дал немного не мало ~300%.

Но основная мысль, которую толкают всякие «гуру» - это не надо следить за тактами/считать такты и прочее. Но мы о5 сделаем наоборот и посмотрим что будет.

Т.к. наш юзкейс упирается на 99% в throughput и дёргается одна инструкция, то нам достаточно просто считать теоретическую производительность для моего камня. 4.5(частота камня)*8(т.е. у нас камень с avx, то там вектор 32байта, либо 8флоатов.)*1(throughput нашей инструкции - в данном случае vpaddps из интел мануала). Т.е. 36гигафлопс, либо ~144гига. Т.е. мы сняли овер 90% теоретической производительности - остальные 10% у нас ушли в наши циклы, всякие горизонтальные суммы вектора и прочее, ну и конечно же чтение данных из кеша.

Но самое смешное - на моём хасвеле умножение имеет throughput 0.5 - т.е. на хасвеле умножение быстрее сложения. Это новая забористая трава у интела.

Казалось бы - какой жопой сложнее оказалось медленнее умножения - а вот так, на всяких штеудах производительность уже давно зависит не от каких-то технических возможностей, а от маркетинга и хотелок.

Поэтому очень смешно слушать, когда какие-то пацаны говорят: «float point имеет такую же производительность как и инты» - нет, оно имеет такоу же производительность лишь по причине того, что на штеуде инты тормазят так же, как и float.

И чтобы окончательно в этом убедится - мы взглянем на fma(вариации умножения со сложением/вычитанем), которые имеют throughput 0.5 - да, да - на хасвеле умножение+сложение в 2раза быстрее просто сложения. Это уже не просто трава - это что-то принципиально новое.

У целочисленного сложения же throughput 0.5 и казалось бы, если мы поменяем в нашей функции float на int - у нас будет сложение работать в 2раза быстрее, но это не так. Оно выдаёт те же 130гигов, а почему?

Вообще у камня есть такая фича, допустим у нас:

add $1, %reg0//вот тут инструкция add залочит регистр reg0
add $1, %reg0//а эта инструкция уйдёт в лок до особождения предыдущей инструкцией регистра reg0

Чтобы такой жопы небыло - есть специальная фича:

add $1, %reg0//lock reg0
add $1, %reg0//И тут вместо того, чтобы уйти в лок - камень вместо reg0 даёт инструкции любой свободный регистр.

Эта фича называется прееименование регистров, либо как-то так - мне лень гуглить.

Дак вот штука в том, что фича работает через жопу. Мне лень читать мануал и искать почему так, но штука в том, что она ограничивает throughput. На умножении и целочисленном сложении она огранивает throughput c 0.5 до 1.

И вот я решил заюзать сложении через fma:

__v8sf fmaadd(__v8sf a, __v8sf b) {
  return _mm256_fmadd_ps(_mm256_set1_ps(1.), a, b);// a + b * 1. == a + b.
}

double memadd_fma(buf_t buf) {
  __v8sf * it = buf_begin(buf), * end = buf_end(buf), summ = {};
  do {
    summ = fmaadd(summ, *it++);
  } while(it != end);
  return hsumf(summ);
}

Но меня ждала жопа: 27.347290GB/s, причем не анролл и ничего не помогал. Я уж подумал, что мануал наврал, но позже до меня допёрло: у неё latency 5тактов и ((4.5×8)÷5)×4 ~= 29гигов - т.е. я получаю производительность с её latency, но какой жопой оно так?

Потом я вспомнил, что гцц гинерит анрольный код вида:

add $1, %reg0
add $1, %reg0
//а не
add $1, %reg0
add $1, %reg1

Т.е. на неё вообще не работает переименовывание регистров - и инструкции постоянно в локе. Я это проверил и оказался прав. Ну и я написал такой мемадд:


__v8sf fmaadd(__v8sf a, __v8sf b) {
  return _mm256_fmadd_ps(_mm256_set1_ps(1.), a, b);
}

inline void fma_10way_finality(__v8sf * cache, __v8sf * it, __v8sf * end) {
  switch(end - it) {
    case 8:
      *(cache + 7) = fmaadd(*(cache + 7), *(it + 7));
      *(cache + 6) = fmaadd(*(cache + 6), *(it + 6));
    case 6:
      *(cache + 5) = fmaadd(*(cache + 5), *(it + 5));
      *(cache + 4) = fmaadd(*(cache + 4), *(it + 4));
    case 4:
      *(cache + 3) = fmaadd(*(cache + 3), *(it + 3));
      *(cache + 2) = fmaadd(*(cache + 2), *(it + 2));
    case 2:
      *(cache + 1) = fmaadd(*(cache + 1), *(it + 1));
      *(cache + 0) = fmaadd(*(cache + 0), *(it + 0));
    case 0:
      break;
    default: error_at_line(-1, 0, __FILE__, __LINE__, "bad_aligned");
  }
}

double memaddfma_10way(buf_t buf) {
  __v8sf * it = buf_begin(buf), * end = buf_end(buf), summ = (__v8sf){};
  __v8sf * cache = (__v8sf[10]){{}};
  uint64_t i = 0;
  while((it += 10) <= end) {
    *(cache + i) = fmaadd(*(cache + i), *(it - i - 1));++i;
    *(cache + i) = fmaadd(*(cache + i), *(it - i - 1));++i;
    *(cache + i) = fmaadd(*(cache + i), *(it - i - 1));++i;
    *(cache + i) = fmaadd(*(cache + i), *(it - i - 1));++i;
    *(cache + i) = fmaadd(*(cache + i), *(it - i - 1));++i;
    *(cache + i) = fmaadd(*(cache + i), *(it - i - 1));++i;
    *(cache + i) = fmaadd(*(cache + i), *(it - i - 1));++i;
    *(cache + i) = fmaadd(*(cache + i), *(it - i - 1));++i;
    *(cache + i) = fmaadd(*(cache + i), *(it - i - 1));++i;
    *(cache + i) = fmaadd(*(cache + i), *(it - i - 1));++i;
    i = 0;
  }
  fma_10way_finality(cache, (it - 10), end);
  summ = (*(cache + 0) + *(cache + 1) + *(cache + 2) + *(cache + 3) +
	  *(cache + 4) + *(cache + 5) + *(cache + 6) + *(cache + 7) +
	  *(cache + 8) + *(cache + 9));
  return hsumf(summ);
}

Пришлось хреначить финалити, ибо тут «анролл» на 10, а почему на 10 - для максимального throughput"а - надо, чтобы каждый каждый регистр юзался через 5тактов - т.е. 10регистров.

И вся эта порятнка нужна для борьбы с тупостью конпелятора.

Это уже: 214.167252GB/s(раельно там в районе 250 - просто мой бенч говно). 107 гигафлопс на ведро. Из теоретических 144, но тут уже влияние кеша. Причем 50+ из которых выкидываются и просто бесплатные.

Теперь вопрос к пацанам - что нам дадут эти гагфлопсы, когда у нас будет массив не 32килобайта, а 32мегабайта? Зачем нужно выживать максимум, когда скорость памяти отсилы 20-30гигабайт и нам хватит даже С++ кода с ffast-math?

Ну и призываются упомянутые мною пацаны: mv - этот тот експерт, что вещал про «руками переименовывать регистры не надо» и «анрол ваще ненужен», emulek вещал про ненужность счёта тактов, и не понимал что такое «беслпатно», AIv - не понимал в чем проблема плюсов, ck114 - так же не понимал в чем проблема плюсов.

Бенчи: https://gist.github.com/superhackkiller1997/606be26fa158ef75501d - вроде я там ничего не напутал.

P.S. - не выпиливайте пж, пусть пацаны «нужно» или «не нужно». Мне интеерсно. Ну и там рекомендации пацанов.

 , , ,

Carb_blog
()

Скрывающийся menubar для XFCE^Wбедных

Галерея — Скриншоты

В последнее время развелось тут странных истеричек, выкладывающих жуть ужасную, а при любом запахе критики начинающих неадекватно реагировать и срочно копошиться в скриншотах критикующих, как будто нелепый встречный наезд чем-то оправдает их срам. Почему-то отсутсвие у меня в галерее скриншотов, по их мнению, лишает меня права констатировать, как плохи дела на их JPG-оптимизированных скриншотах. Ну что же, выкладываю свои.

Главная фишка: по клику на имя окна в панели меняются struts и menubar прячется под панель, оставляя на экране чем-то напоминающую Unity годноту. По еще одному клику появляется обратно. Сделано при помощи xfwm4-titleless и хака в xfce4-windowck-plugin. На работе, когда подключаю к ноутбукам внешний дисплей, эта фишка работает только на нем.

Тема: Ambiance. Очень люблю ее и overlay-scrollbars. Как и все остальное, автоматически устанавливается и включается при помощи Salt.

На втором ноутбуке то же самое (только кардинально другой DPI, что также настраивается автоматически через Salt). Предвосхищая комментарии: palemoon выбран из-за какой-никакой поддержки, старого Sync для своего сервера синхронизации и нормального внешнего вида.

Адресная строка эрегируется по фокусу ощутимо пропатченным Mozilla Labs: Prospector - OneLiner 2.

Основные мобильные девайсы:

Если кто любит попугайство и считает, что мои скрины не модны, то извините, я наигрался. Но так как для ведения дискуссии надо за что-то меня унижать, то вот:

Dontes, everest2014 и прочие СПЕРДОБисты, довольны? Теперь просьба проследовать в специально созданные для критики ваших нелепостей топики.

>>> Просмотр (1366x768, 56 Kb)

 , , ,

t184256
()