
Stanislav
12.05.2016
22:36:44

Alex Фэils?︙
12.05.2016
22:37:25
Ммм... армы...
Ну<. Как я понял, чувак исследует эту тему

Google

Alex Фэils?︙
12.05.2016
22:37:45
По х86
Я пожалуй в диссер впильну референс на эту табличку

Andrei
12.05.2016
22:38:39
http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.ddi0408h/ch02s03s02.html
Для армов.

Stanislav
12.05.2016
22:39:27

Alex Фэils?︙
12.05.2016
22:41:11
Да(
Мб слыхал, и забыл
ребят, кто-нибудь работал с OpenCL?

Stanislav
13.05.2016
00:20:31
? неа


Square
13.05.2016
10:10:37
Посоны. нужна критика...
Межпоточное взаимодействие. Для выталкивания данных из потока у него на выходе есть статический буфер. Также у каждого потока есть условно-говоря "входная" лок-фри очередь, куда ему складывают указатели на данные, которые пишучий поток хранит в "своем" экземпляре буфера. Читающий выбирает элементы из своей входной очереди, и лезет за данными к потоку-родителю, в его выходной буфер, где твориться самая "грязь"... суть такова, что пишущий поток условно идет перед читающим и проверяет постоянно его "позицию" на своем выходе, чтобы не наступить на хвост... read/write offset в выходном буфере под "атомиками"... т.е. у буфера есть только метод addItem() в котором это колдунство творится, ломаю голову над тем, что можно улучшить.
Схема не самая удачная, могу рассазать про подводные камни, с которыми столкнулись, однако скорость работы весьма достойная...
После ухода от мютексов и прочих критических секций прирост скорости значительный, но теперь глаз настолько замылен, что ничего другого не придумывается

Google

Alex Фэils?︙
13.05.2016
10:13:22
Ща подумаю

Square
13.05.2016
10:13:52
буфер аллокейтится перед началом работы, в зависимости от количества потоков размер очереди от 100 мбайт до 2-5 гбайт и от 10к до 1КК элементов.

Alex Фэils?︙
13.05.2016
10:13:55
Кольцевые буферы, аддитем и пр

Square
13.05.2016
10:14:04

Alex Фэils?︙
13.05.2016
10:14:36
а что за потоки вообще есть
Есть поток с данными
Есть всп для него на чтение/запист

Square
13.05.2016
10:15:36
один поток решает одну задачу над данными, второй - другую... условно так
средний размер блока 100 кбайт
между ними все это и происходит...
сейчас есть небольшие проблемы с тем, чтобы все это хозяйство корректно тормозить... особенно когда появляются "обратные" связи

Alex Фэils?︙
13.05.2016
10:18:19

Andrey
13.05.2016
10:19:46
Межпоточное взаимодействие. Для выталкивания данных из потока у него на выходе есть статический буфер. Также у каждого потока есть условно-говоря "входная" лок-фри очередь, куда ему складывают указатели на данные, которые пишучий поток хранит в "своем" экземпляре буфера. Читающий выбирает элементы из своей входной очереди, и лезет за данными к потоку-родителю, в его выходной буфер, где твориться самая "грязь"... суть такова, что пишущий поток условно идет перед читающим и проверяет постоянно его "позицию" на своем выходе, чтобы не наступить на хвост... read/write offset в выходном буфере под "атомиками"... т.е. у буфера есть только метод addItem() в котором это колдунство творится, ломаю голову над тем, что можно улучшить.
Схема не самая удачная, могу рассазать про подводные камни, с которыми столкнулись, однако скорость работы весьма достойная...
А нельзя создать поток, который будет наполнять локальную очередь?


Square
13.05.2016
10:20:20
очередей много ...
попробую нарисовать схемку...
как вы бы сами замутили межпоточный обмен. где критичны каждое выделение памяти и блокировки...

Alex Фэils?︙
13.05.2016
10:36:57
На статичном бкфере

Astroman
13.05.2016
10:37:35
Че делать? Зависла, еле закрыл VS, походу сбросилась, и теперь игра отображается неправильно

Google

Astroman
13.05.2016
10:37:49

Square
13.05.2016
10:38:18
выйти-зайти?

trump ? trump ? hillary
13.05.2016
12:01:27

Сергей
13.05.2016
12:01:54
Как использовать дефолтные значения параметров в шаблонных функциях?
template<typename T>
T str_to_decimal(std::string &s, int base = 10);
template<>
int32_t str_to_decimal<int32_t?std::string &s, int base = 10)
{
}

Alex Фэils?︙
13.05.2016
12:02:11
не пашет? иль что?

Сергей
13.05.2016
12:02:21
Ругается на присвоение во второй перегрузке

Alex Фэils?︙
13.05.2016
12:02:34
дык убери

Сергей
13.05.2016
12:02:39
И будет норм?
В плане работы

Alex Фэils?︙
13.05.2016
12:02:46
да
правило одного определения и пр. муть

Andrei
13.05.2016
12:07:18

Square
13.05.2016
12:07:53

Andrei
13.05.2016
12:08:10
Ну задачу свою.

Square
13.05.2016
12:08:11
решение я описал. юзаем.

Andrei
13.05.2016
12:08:17
Понятно.
Ну разве что иогу предложить полиси у атомиков поменять
Если еще не сделали
На load-consume

Google

Andrei
13.05.2016
12:08:49
У читающих тредов.
Потому что указатели.
Чтобы включить реордеринг обратно для независимых инструкций.
У пишущих store release у читающих по указателям load-consume
Вместо load-acquire

Square
13.05.2016
12:10:44
спс, попробуем потрогать так
так, погодь, между тредами кольцевой буфер, у которого офсеты лежат в атомиках. пишущий/читающий обращаются именно к ним
при обращении говорить потоку как ему load делать?

Andrei
13.05.2016
12:15:38
Буфер не весь из атомиков ведь правда?

Admin
ERROR: S client not available

Square
13.05.2016
12:15:44
нет

Andrei
13.05.2016
12:15:46
Только указатель на него атомик
Да.

Square
13.05.2016
12:16:16
а это в с11 есть?
мне кажется только в 14м появилось

Andrei
13.05.2016
12:17:42
В с++11
Атомику пишешь

Square
13.05.2016
12:17:50
хорошо, благодарю

Andrei
13.05.2016
12:19:24
myatomicptr.store(rawptr, std:: memory_order_release) у читающего ptr = atomicdatasourceptr.load(std::memory_order_comsume)
Еще в языке есть всякие штуки типа std::kill_dependency

Google

Andrei
13.05.2016
12:20:19
Можно вот на таком уровне все сделать и ручками memory fence поднимать.

Square
13.05.2016
12:23:48
от души! я все никак не могу в memory order осилить :( остался в прошлом веке почти

Andrei
13.05.2016
12:28:12
Да там легко. 40 минут есть? Посмотри лекцию. https://m.youtube.com/watch?v=_-3syPxgwqs

Square
13.05.2016
12:29:45
Лекция зачот!
Я понял что нам ослабленный порядок вполне себе подходит
Главное что обеспечивается атомарность изменений.
Это по идее ещё больше добавит скорости. На миллионе элементов должно быть заметно

Andrei
13.05.2016
13:55:05
Да.

Alex Фэils?︙
13.05.2016
13:55:17
ммм.... ослабенный порядок...

Andrei
13.05.2016
13:55:23
Тебе не нужен sequential consistency
только release-consume
Потому как у тебя там указатели.

Square
13.05.2016
14:00:52
Ох, вспоминаю я код 2009 года, ядро системы на делфи и все обвешано этими критическими секциями
Причём в 2009 его с плюсов на на Паскаль переложили изза менеджера памяти
Намучились мы за эти годы с паскакалем

? Snyp
13.05.2016
14:06:10
Ребят, чем черевато если оставаться на старой версии плюсов и не изучать новые 11 и 14 версии? Или это дело вкуса?

Alex Фэils?︙
13.05.2016
14:06:23
тем, что устареешь

Andrei
13.05.2016
14:06:25
Чревато остаться без работы плюсера :D

Square
13.05.2016
14:06:42
И обрастанием мхом ;)

? Snyp
13.05.2016
14:06:59
Почитал вас тут, пишете что все новое в новых версиях не так легко дается когда привык к старому.