@ProCxx

Страница 164 из 2477
Stanislav
12.05.2016
22:36:44
http://www.agner.org/optimize/instruction_tables.pdf
хотя от такой же для армов я бы не отказался :)

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 кбайт

а что за потоки вообще есть
в одном экземпляре ПО на обработку задействуется 5-10 потоков. зависит от сценария...

между ними все это и происходит...

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

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
да

правило одного определения и пр. муть

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

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

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