Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / C++ Новый топик    Ответить
Топик располагается на нескольких страницах: Ctrl  назад   1 2 3 [4] 5 6   вперед  Ctrl      все
 Re: как обнулить ячеку вектора (не удаляя)?  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 7650
бабушкин зайчик
PetroNotC Sharp
ТЗ где?)))

править вектор в несколько потоков, и чтобы всё чётко
постановщика тебе надо грамотного
5 апр 21, 14:26    [22304471]     Ответить | Цитировать Сообщить модератору
 Re: как обнулить ячеку вектора (не удаляя)?  [new]
бабушкин зайчик
Member

Откуда: сетевой
Сообщений: 61
PetroNotC Sharp
бабушкин зайчик,
Заполнил вектор на миллион - отдал потоку.
Заполнил второй - отдал второму потоку.
НИЧЕГО НЕ ЛОЧИМ

он правится потоками бесконечное кол-во раз по одной ячейке за раз

Сообщение было отредактировано: 5 апр 21, 14:21
5 апр 21, 14:26    [22304472]     Ответить | Цитировать Сообщить модератору
 Re: как обнулить ячеку вектора (не удаляя)?  [new]
mayton
Member

Откуда: loopback
Сообщений: 51017
бабушкин зайчик
mayton
Мне кажется что поиск свободных дырок в массиве (задачка o(n) асимптоматичная) - нивелирует вообще все выгоды
которые автор хочет получить от мнимых оптимизаций и кешей и потоков. Тут по смыслу больше не vector подходит а set.

Но это моё частное мнение и если автор хочет - ну пускай делает пробы с o(n) по массиву-миллионнику.

P.S. Scientia potentia est.

а не надо искать, надо вектор дырок держать

Еще один вектор где лежат одни дырки?
5 апр 21, 14:29    [22304474]     Ответить | Цитировать Сообщить модератору
 Re: как обнулить ячеку вектора (не удаляя)?  [new]
бабушкин зайчик
Member

Откуда: сетевой
Сообщений: 61
mayton
Еще один вектор где лежат одни дырки?

адреса дырок
5 апр 21, 14:29    [22304475]     Ответить | Цитировать Сообщить модератору
 Re: как обнулить ячеку вектора (не удаляя)?  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 7650
бабушкин зайчик
PetroNotC Sharp
бабушкин зайчик,
Заполнил вектор на миллион - отдал потоку.
Заполнил второй - отдал второму потоку.
НИЧЕГО НЕ ЛОЧИМ

он заполняется потоками
смешно. Чтобы опять с одной миски все ели?)))))
5 апр 21, 14:31    [22304476]     Ответить | Цитировать Сообщить модератору
 Re: как обнулить ячеку вектора (не удаляя)?  [new]
Dima T
Member

Откуда:
Сообщений: 15689
бабушкин зайчик
Dima T
Один поток работает только с одним конкретным i или с разными? Т.е. {v1[5], v2[5], v3[5]} или {v1[4], v2[7], v3[6]} ? Если первое, то мутекс как я писал 22304417

каждый поток может залезть в v1[1] ИЛИ v1[2] ИЛИ vN[M] - в любой
НО всегда есть шанс, что оба залезут в одну ячейку
и такой баг потом хер поймаешь

Начни с простого - один мутекс на всех, код будет как я выше показал 22304455 Только оптимизируй код так чтобы сначала подготовить нужные данные, затем блокировка, быстро прочитать/записать и снять блокировку.
Будет тормозить - тогда будешь дальше усложнять работу с блокировками. К тому времени немного опыта добавится.
5 апр 21, 14:32    [22304477]     Ответить | Цитировать Сообщить модератору
 Re: как обнулить ячеку вектора (не удаляя)?  [new]
mayton
Member

Откуда: loopback
Сообщений: 51017
бабушкин зайчик
mayton
Еще один вектор где лежат одни дырки?

адреса дырок

А как менеджерить этот вектор адресов дырок? И как его блокировать? Он ведь тоже будет играть по правилам
твоей мультипоточки и ему точно также нужны будут мутексы или критические секции.
5 апр 21, 14:33    [22304478]     Ответить | Цитировать Сообщить модератору
 Re: как обнулить ячеку вектора (не удаляя)?  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 7650
Мне нравится дизайн)))
Тарелок на столе нет.
Все потоки едоки варят кастрюлю супа.
Потом как сварили, начинают есть все из одной.
Толкаясь и матерясь. Почему никто в очередь не ставит строго по одному.
))
5 апр 21, 14:34    [22304480]     Ответить | Цитировать Сообщить модератору
 Re: как обнулить ячеку вектора (не удаляя)?  [new]
petrav
Member

Откуда:
Сообщений: 2861
mayton
бабушкин зайчик
пропущено...

адреса дырок

А как менеджерить этот вектор адресов дырок? И как его блокировать? Он ведь тоже будет играть по правилам
твоей мультипоточки и ему точно также нужны будут мутексы или критические секции.

Кстати, если у автора есть массив дырок, то не очень понятен его первый пост - где он предлагал вводить булеву
переменную в каждую ячейку - признак того, что ячейка пустая. Ну а как началась многопоточность то ваще.
5 апр 21, 14:38    [22304484]     Ответить | Цитировать Сообщить модератору
 Re: как обнулить ячеку вектора (не удаляя)?  [new]
Dima T
Member

Откуда:
Сообщений: 15689
petrav
mayton
пропущено...

А как менеджерить этот вектор адресов дырок? И как его блокировать? Он ведь тоже будет играть по правилам
твоей мультипоточки и ему точно также нужны будут мутексы или критические секции.

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

Одно другому не мешает: флаг пустоты нужен при проверке когда обращаешься к конкретной ячейке, а список индексов пустых для добавления новых, иначе перебор всего массива в поисках пустой.
5 апр 21, 14:43    [22304489]     Ответить | Цитировать Сообщить модератору
 Re: как обнулить ячеку вектора (не удаляя)?  [new]
бабушкин зайчик
Member

Откуда: сетевой
Сообщений: 61
Dima T
бабушкин зайчик
пропущено...

каждый поток может залезть в v1[1] ИЛИ v1[2] ИЛИ vN[M] - в любой
НО всегда есть шанс, что оба залезут в одну ячейку
и такой баг потом хер поймаешь

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

Я вот честно не вижу смысла в мутексе вообще...
может опыта конечно мало, но он очевидно НЕ залочит сами данные, а без этого совершенно накласть на всё остальное.
А вот как обеспечить НЕвозможность записать в одну ячейку - вопрос остаётся открытым...
вешать где-то флаг, что эта ячейка занята и чекать его каждый раз?
это на сколько же %% похерит производительность?
5 апр 21, 14:43    [22304490]     Ответить | Цитировать Сообщить модератору
 Re: как обнулить ячеку вектора (не удаляя)?  [new]
бабушкин зайчик
Member

Откуда: сетевой
Сообщений: 61
mayton
бабушкин зайчик
пропущено...

адреса дырок

А как менеджерить этот вектор адресов дырок? И как его блокировать? Он ведь тоже будет играть по правилам
твоей мультипоточки и ему точно также нужны будут мутексы или критические секции.

ты меня такими вопросами доведёшь до белого колена, плюну на всё и сделаю в один поток

Сообщение было отредактировано: 5 апр 21, 14:39
5 апр 21, 14:45    [22304491]     Ответить | Цитировать Сообщить модератору
 Re: как обнулить ячеку вектора (не удаляя)?  [new]
Dima T
Member

Откуда:
Сообщений: 15689
бабушкин зайчик
А вот как обеспечить НЕвозможность записать в одну ячейку - вопрос остаётся открытым...

Вообще-то для этих целей мутекс используют обычно.
5 апр 21, 14:45    [22304492]     Ответить | Цитировать Сообщить модератору
 Re: как обнулить ячеку вектора (не удаляя)?  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 7650
бабушкин зайчик,
А ты слышал что оракл не блокировочник а сиквел блокировочник?
Никто ведь не помер.
Узко вопросы задаешь.
5 апр 21, 14:46    [22304493]     Ответить | Цитировать Сообщить модератору
 Re: как обнулить ячеку вектора (не удаляя)?  [new]
Dima T
Member

Откуда:
Сообщений: 15689
бабушкин зайчик
mayton
пропущено...

А как менеджерить этот вектор адресов дырок? И как его блокировать? Он ведь тоже будет играть по правилам
твоей мультипоточки и ему точно также нужны будут мутексы или критические секции.

ты меня такими вопросами доведёшь до белого колена, плюну на всё и сделаю в один поток

Достаточно добавить отдельный мутекс для работы с этим массивом.
5 апр 21, 14:49    [22304495]     Ответить | Цитировать Сообщить модератору
 Re: как обнулить ячеку вектора (не удаляя)?  [new]
бабушкин зайчик
Member

Откуда: сетевой
Сообщений: 61
Dima T
бабушкин зайчик
А вот как обеспечить НЕвозможность записать в одну ячейку - вопрос остаётся открытым...

Вообще-то для этих целей мутекс используют обычно.

а мой случай обычный?
В моём случае он заблочит ячейку? Потому что даже если он заблочит весь вектор, это уже НЕ подходит.
Но он вроде даже и вектор не лочит...
5 апр 21, 14:49    [22304496]     Ответить | Цитировать Сообщить модератору
 Re: как обнулить ячеку вектора (не удаляя)?  [new]
mayton
Member

Откуда: loopback
Сообщений: 51017
бабушкин зайчик

это на сколько же %% похерит производительность?

Никто на это не ответит. Программирование - это практическая наука. А моделируемый объект (программа)
настолько сложен что мы не в состоянии создать формулу времени отклика. Напиши макет кода. Запускай.
И смотри как он работает.

Симуляция - это нормальный способ замера времени. Физики так делают часто. Симулируют потоки частиц
и смотрят потом как оно. Меряют.

Тоесть смысл моего поста в том что мы не можем предложить улучшение к пустоте. Нам нужен объект.

Кстати у меня к тебе настойчивая модераторская просьба - огласить полное ТЗ. Я понимаю
что для тебя это игровая задача и ты по ходу придумываешь брейнштомом всякие костыли
и подпорки в виде массивов индексов. Но мы просто топчемся на месте.
5 апр 21, 14:50    [22304497]     Ответить | Цитировать Сообщить модератору
 Re: как обнулить ячеку вектора (не удаляя)?  [new]
бабушкин зайчик
Member

Откуда: сетевой
Сообщений: 61
Dima T
бабушкин зайчик
пропущено...

ты меня такими вопросами доведёшь до белого колена, плюну на всё и сделаю в один поток

Достаточно добавить отдельный мутекс для работы с этим массивом.

и все будут висеть и ждать его?
5 апр 21, 14:50    [22304498]     Ответить | Цитировать Сообщить модератору
 Re: как обнулить ячеку вектора (не удаляя)?  [new]
Dima T
Member

Откуда:
Сообщений: 15689
Почитай про синхронизацию доступа:

https://www.google.com/search?q=синхронизация доступа к данным С

https://habr.com/ru/post/182610/
5 апр 21, 14:52    [22304501]     Ответить | Цитировать Сообщить модератору
 Re: как обнулить ячеку вектора (не удаляя)?  [new]
бабушкин зайчик
Member

Откуда: сетевой
Сообщений: 61
mayton
Кстати у меня к тебе настойчивая модераторская просьба - огласить полное ТЗ.

так огласил же - запись в вектор в несколько потоков БЕЗ data race/race condition
5 апр 21, 14:53    [22304502]     Ответить | Цитировать Сообщить модератору
 Re: как обнулить ячеку вектора (не удаляя)?  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 52921

бабушкин зайчик
и все будут висеть и ждать его?

Нет, только те, кого ты заставишь это делать.

Posted via ActualForum NNTP Server 1.5

5 апр 21, 14:56    [22304505]     Ответить | Цитировать Сообщить модератору
 Re: как обнулить ячеку вектора (не удаляя)?  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 7650
бабушкин зайчик
mayton
Кстати у меня к тебе настойчивая модераторская просьба - огласить полное ТЗ.

так огласил же - запись в вектор в несколько потоков БЕЗ data race/race condition
а где тут скорость с первой страницы. И где Нужность дырок?
5 апр 21, 14:57    [22304508]     Ответить | Цитировать Сообщить модератору
 Re: как обнулить ячеку вектора (не удаляя)?  [new]
petrav
Member

Откуда:
Сообщений: 2861
Dima T
petrav
пропущено...

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

Одно другому не мешает: флаг пустоты нужен при проверке когда обращаешься к конкретной ячейке, а список индексов пустых для добавления новых, иначе перебор всего массива в поисках пустой.

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

Кстати, если массив дырок и дырок много, то потребуется уже смещать влево массив дырок. А аффтар этага ни хател.

Короче, это ржачная тема.
5 апр 21, 14:57    [22304509]     Ответить | Цитировать Сообщить модератору
 Re: как обнулить ячеку вектора (не удаляя)?  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 7650
ТС, тебя закроют.
Код гони с проблемой.
5 апр 21, 15:00    [22304511]     Ответить | Цитировать Сообщить модератору
 Re: как обнулить ячеку вектора (не удаляя)?  [new]
mayton
Member

Откуда: loopback
Сообщений: 51017
бабушкин зайчик
mayton
Кстати у меня к тебе настойчивая модераторская просьба - огласить полное ТЗ.

так огласил же - запись в вектор в несколько потоков БЕЗ data race/race condition

Это-же не все. Дальше ты писал еще про "адреса дырок". Что с ними делать? Ты их уже отменяешь?

И еще надо-бы знать сколько будет потоков. Если их будет 100500 - тогда наверное лучше их ставить
в некую очердь команд. И надо знать (примерно) характер и род доступа к массиву. Если он - когерентный
- то мы можем шибко соптимизировать на близких адресах хотя-бы в пределах кеш-линий или страниц.
Если между потоками не нужен жесткий ордеринг команд - то мы можем переупорядочить поток команд
таким образом чтобы мы больше писали в кеш-линию и страницу чем рандомно. Так работали старые жесткие
диски (NCQ/TCQ). И вроде-бы никто не замечал логических ошибок чтения записи. Всё было прозрачно.
И вообще чем больше твой массив - тем больше надо думать об эффекте L2/L3.
5 апр 21, 15:00    [22304512]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 2 3 [4] 5 6   вперед  Ctrl      все
Все форумы / C++ Ответить