@ProCxx

Страница 1937 из 2477
Constantine
04.04.2018
16:02:09
TriΔng3l
04.04.2018
16:02:31
Обработаешь как BOM
Да, буду местами менять байты, но это уже в коде чтения файлов

А в строках — пофиг, там считаю, что нативный endian

Constantine
04.04.2018
16:03:04
Короче мой тебе совет, твой сосед с неконтроллируемой агрессии очень не любит, когда ему некорректный возврат возращают

Google
Constantine
04.04.2018
16:03:22
Если стандарт юникода говорит, что символ U+FFFE запрещен, то ты не должен его возвращать

TriΔng3l
04.04.2018
16:05:19
Но вообще, грузить UTF-16 я вряд ли буду где-либо

Только UTF-8

return ((cp » 1u) != 0x7fffu && (cp & ~((abTextU32) 0x7ffu)) != 0xd800u) ? cp : abText_InvalidSubstitute;

return (cp <= 0x10ffffu && (cp & 0xfffeu) != 0xfffeu) ? cp : abText_InvalidSubstitute;

еееее, говнокод)))

Oleg
04.04.2018
16:16:40
/

Jack
04.04.2018
16:19:56
Когда не шарю в программировании, но хочу изучать

Vladislav
04.04.2018
16:20:53
Когда не шарю в программировании, но хочу изучать
Только не пиши никогда такие тернарные операторы

TriΔng3l
04.04.2018
16:52:48
Не ожидал такого различия на MSVC (32-битном) O_O https://godbolt.org/g/6yGwTx

Но Clang и GCC выдали то же самое, только с разными immediates

Google
Columbus
04.04.2018
16:57:21
иногда они выглядят даже приятнее, чем обычные ифы

TriΔng3l
04.04.2018
16:58:23
И на ARM тоже сдвиг immediate не был использован, видимо, там 0xd800|(0xd800«16) раскрылось

unsigned int abTextU16_EncodeCP_ValidV3(unsigned int cp) { if ((cp >> 16u) == 0u) { return cp; } unsigned int low = 0xd800u | (cp & 0x3ffu); unsigned int high = 0xd800u | (cp >> 10u); return low | (high << 16u); } abTextU16_EncodeCP_ValidV3(unsigned int): lsrs r3, r0, #16 beq .L14 movs r3, #216 lsls r0, r0, #22 lsrs r0, r0, #22 lsls r3, r3, #8 orrs r3, r0 lsls r0, r3, #16 orrs r0, r3 .L14: bx lr Красотища, ни одного ldr

Вот так и буду делать, по отдельности

mov rax, 57982943232 ; 0000000d800d8000H 64-битный MSVC в той функции, что V2 ?

А вот в V3 уже immediates 16-битные

Вообще, эта функция мне и не нужна

Dmitrii
04.04.2018
17:10:27
а на си разве нельзя писать более...красиво?
На Си в Яблоке красиво пишут. Остальные вырвиглаз-стайл. ?

TriΔng3l
04.04.2018
17:10:57
На Си в Яблоке красиво пишут. Остальные вырвиглаз-стайл. ?
Есть примеры того, что особенно красиво?

Код Quake тоже красиво выглядит, хоть и там не очень строго со стилем было

Bogdan
04.04.2018
17:11:32
Ллвм код хорошо выглядит тоже

TriΔng3l
04.04.2018
17:13:05
Линк?
Например https://github.com/id-Software/Quake/blob/master/WinQuake/sv_main.c

Dmitrii
04.04.2018
17:14:26
Есть примеры того, что особенно красиво?
Утечки их boot'a в сети выкладывали правда они потом быстро эти ресурсы прикрыли. В сети мож где есть ещё надо поискать.

TriΔng3l
04.04.2018
17:16:20
да ёпт

к d800 прибавляются верхние биты

а к dc00 нижние

ладно, буду ксорить с dc00, а не орить с d800)))

Aidar
04.04.2018
17:17:48
ладно, буду ксорить с dc00, а не орить с d800)))
харе ассемблерную кашу вываливать в чат

Google
TriΔng3l
04.04.2018
17:18:40
ой, а этот верхний бит и не всегда будет стоять же

Владислав
04.04.2018
17:22:54
ой, а этот верхний бит и не всегда будет стоять же
можешь устроить стрим на твиче, как ты программируешь, транслировать всё это в чат нет необходимости

Kirill
04.04.2018
17:24:15
это нижняя сторона C++)
Для этого есть godbolt. Это во первых. Во вторых этот нечитаемый Пипец с тонной magic numbers и вырвигюглазным синтаксисом не просто является эталонным примером premature optimization. оно еще и написано в стиле универских лаб

Сотни статей и десятки книг посвящены именно тому, что так писать нельзя

Fedor
04.04.2018
17:54:20
?

vlad
04.04.2018
17:57:10
Всем привет Есть некоторый пул потоков, реализованный на основе вектора из thread Есть некоторая очередь с задачами Взаимодействие между ними налажено, всё более-менее работает На текущий момент поток ждёт notify_one, после чего хватает очередь, блокирует её, берёт задачу и разблокирует для дальшейших потоков, которые так же в состоянии ожидания Стоит задача: Нужно модернизировать систему так, чтобы число потоков было ограниченным (допустим, сделаю 4 потока, по ядру на каждый) и сделать балансировку задач, которые лежат в очереди, между потоками Мысли: Разделить количество задач между потоками (допустим, есть 12 задач, на каждый поток будет отводится по 3, соответственно). Для этого нужно либо завести на каждый поток свою очередь, куда закинуть задачи только для данного потока, либо как-то ещё. Отчего-то эта идея кажется плохой, но в голову другой не идёт. Помогите, пожалуйста, как это лучше спланировать. Вопрос: Как лучше поступить?

Fedor
04.04.2018
17:58:37
concurent queue реализуй

Когда один из потоков выполнил задачу, то сразу выхватывает следующую из очереди

Admin


Ostap
04.04.2018
17:59:03
Всем привет Есть некоторый пул потоков, реализованный на основе вектора из thread Есть некоторая очередь с задачами Взаимодействие между ними налажено, всё более-менее работает На текущий момент поток ждёт notify_one, после чего хватает очередь, блокирует её, берёт задачу и разблокирует для дальшейших потоков, которые так же в состоянии ожидания Стоит задача: Нужно модернизировать систему так, чтобы число потоков было ограниченным (допустим, сделаю 4 потока, по ядру на каждый) и сделать балансировку задач, которые лежат в очереди, между потоками Мысли: Разделить количество задач между потоками (допустим, есть 12 задач, на каждый поток будет отводится по 3, соответственно). Для этого нужно либо завести на каждый поток свою очередь, куда закинуть задачи только для данного потока, либо как-то ещё. Отчего-то эта идея кажется плохой, но в голову другой не идёт. Помогите, пожалуйста, как это лучше спланировать. Вопрос: Как лучше поступить?
https://github.com/cameron314/concurrentqueue

Вместо тысячи слов

Fedor
04.04.2018
17:59:24
таки да

vlad
04.04.2018
18:00:48
Открыл заголовочник, стало страшно Я буду честен, хотя тут таких не любят - это задание, которое будет проверять преподаватель Система уже готова, нужно только в неё внести правки Т.е. реализовывать что-то с нуля - нет времени, хотя сейчас понимаю, что так было бы лучше Если вам не сложно, подскажите, пожалуйста, в какую сторону решения копать Если вдруг кто-то с таким сталкивался

xPushkin
04.04.2018
18:03:09
https://github.com/progschj/ThreadPool здесь просто идеальный код, смотри как работает конд_вар
Я правильно понимаю, что треды в С++ работают параллельно?

Ostap
04.04.2018
18:03:37
Как запрограммируешь

Но такого, как ГИЛ в питоне нету

vlad
04.04.2018
18:04:38
У меня реализация по этому же примеру, по нему делал свой пул. Переменные состояния тоже заюзал, т.е. поток, что ожидает - получает уведомление, что можно брать задачу, если ссылается на очередь (а на очередь этот сукин сын точно ссылается) Получается, нагрузка у меня и так балансируется?

Google
vlad
04.04.2018
18:04:44
Чего же тогда преподу не понравилось)

Ostap
04.04.2018
18:07:51
Потому-что, очевидно, что большинство считает, что эффективно - это когда равное количество задач на каждый поток

Но это заблуждение

Как только поток освобождается - он захватывает новую задачу

vlad
04.04.2018
18:08:45
Я очень надеюсь завтра (ух ты ж ё, уже сегодня) ему это доказать. Спасибо, допилю пока отчёт, разжую все моменты.

Ostap
04.04.2018
18:09:14
Чтобы доказать, сделай элементарную функцию с числами Фибоначчи

И сделай замеры по времени

Нагружая очередь

vlad
04.04.2018
18:09:47
У меня умножение матрицы на матрицу, по блокам разбивал. Но на фибоначчи - да, проще будет. Так и сделаю.

vlad
04.04.2018
18:11:26
У меня обработка в очереди стоит на это дело. Тут в коде всё прозрачно, но само собой это только пул. Очередь отдельно пилил.

Ostap
04.04.2018
18:17:57
а если task() исключение бросит?)
Передать исключение в другой поток через move(), что мешает

Constantine
04.04.2018
18:25:34
Передать исключение в другой поток через move(), что мешает
Я криво читаю, уже понял, там таска оборачивается

Передать исключение в другой поток через move(), что мешает
Еще мне не нравится, что вот здесь не перемещение, но вроде-как-не-сломается https://github.com/progschj/ThreadPool/blob/master/ThreadPool.h#L80

Страница 1937 из 2477