Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 16.02.2016, 10:22   #11
Smitt&Wesson
Старожил
 
Аватар для Smitt&Wesson
 
Регистрация: 31.05.2010
Сообщений: 13,543
По умолчанию

Цитата:
Сообщение от Sibedir Посмотреть сообщение
Smitt&Wesson, молодец, садись, пять. Не мороч топикстартеру голову (нам ты её всёравно не заморочишь ). Для описаной задачи 100 потоков - это перебор (и не надо ля-ля про приостановленные потоки). Потоков должно быть в этой задачи N-1, где N - кол-во ядер (физических или логических? не знаю. тут, кажется, тонко). А картинки должны вставать в одну очередь, из которой потоки и будут их забирать.
Да вот, собственно, и всё.
Sibedir, садись, два.
Процессоры, ядра и потоки. Топология систем.
Изображения
Тип файла: jpg Диспетчер-задач.jpg (70.3 Кб, 40 просмотров)
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder

Последний раз редактировалось Smitt&Wesson; 16.02.2016 в 10:39.
Smitt&Wesson вне форума Ответить с цитированием
Старый 16.02.2016, 10:30   #12
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,434
По умолчанию

Цитата:
Вы многопоточные приложения не видели? Мне интересно, как выполнить цикл по сравнению одного изображения с базой и сделать это наиболее быстрым и экономичным способом. Программа работает в несколько потоков, т.е. параллельно должны распозноваться несколько картинок
Если распараллелить сравнение 1 картинки на 4 потока, и запускать по 4 картинки за раз, сравнивать вы будете в 16 потоков, но в 4 раза быстрее, чем если бы вы сравнивали по картинке на поток.

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

Последний раз редактировалось Человек_Борща; 16.02.2016 в 10:32.
Человек_Борща вне форума Ответить с цитированием
Старый 16.02.2016, 10:46   #13
Smitt&Wesson
Старожил
 
Аватар для Smitt&Wesson
 
Регистрация: 31.05.2010
Сообщений: 13,543
По умолчанию

Цитата:
Сообщение от Человек_Борща Посмотреть сообщение
Если распараллелить сравнение 1 картинки на 4 потока, и запускать по 4 картинки за раз, сравнивать вы будете в 16 потоков, но в 4 раза быстрее, чем если бы вы сравнивали по картинке на поток.

По хорошему же в многопоточном приложении есть пул потоков, которому просто скармливается картинка, а пул сам разбирается - выделить ли ещё работников или занять делом бездельников.
Вот тут согласен. Не важно, сколько создано логических потоков. За их распределением по физическим процессорам (ядрам) следит супервизор операционной системы. Есть ещё тонкость. Можно создать простой поток, а можно - привелигированный. Отличие в том, что обычный, выполняется в порядке очерёдности, а привилегированный, в момент освобождения любого из ядер. Т.е. имеет наивысший приоритет прерываний.
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder
Smitt&Wesson вне форума Ответить с цитированием
Старый 16.02.2016, 11:25   #14
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Цитата:
Если распараллелить сравнение 1 картинки на 4 потока, и запускать по 4 картинки за раз, сравнивать вы будете в 16 потоков, но в 4 раза быстрее, чем если бы вы сравнивали по картинке на поток.
За счет каких ресурсов для этой задачи на 4-ядернике, например, это произойдет? Бестолковые 16 потоков вместо 4 на 4-ядернике только замедлят
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию

Последний раз редактировалось Аватар; 16.02.2016 в 11:41.
Аватар вне форума Ответить с цитированием
Старый 16.02.2016, 11:38   #15
Sibedir
Тот ещё
Старожил
 
Аватар для Sibedir
 
Регистрация: 14.11.2007
Сообщений: 2,242
По умолчанию

Цитата:
Сообщение от Smitt&Wesson Посмотреть сообщение
Для ДАННОЙ задачи, Smitt&Wesson. Для данной, конкретно этой задачи. 100 потоков с одним исполняемым кодом на одной области данных - вот это 2.
Sibedir вне форума Ответить с цитированием
Старый 16.02.2016, 12:07   #16
Smitt&Wesson
Старожил
 
Аватар для Smitt&Wesson
 
Регистрация: 31.05.2010
Сообщений: 13,543
По умолчанию

Цитата:
Сообщение от Sibedir Посмотреть сообщение
Для ДАННОЙ задачи, Smitt&Wesson. Для данной, конкретно этой задачи. 100 потоков с одним исполняемым кодом на одной области данных - вот это 2.
Да я вообще не об этих злосчастных 100 потоках. Пусть их будет 1, 10, 100 или 1000. Я о том, что это логические потоки, а ядра их выполняют по мере освобождения. Один и тот-же поток, в разные промежутки времени, может выполняться на разных ядрах. Причём, выполняется только временнОй квант, а не весь поток в целом. И давай прекратим (оба) ставить друг-другу оценки. Прикол-приколом, но это уже не смешно.
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder
Smitt&Wesson вне форума Ответить с цитированием
Старый 16.02.2016, 13:23   #17
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,434
По умолчанию

Цитата:
За счет каких ресурсов для этой задачи на 4-ядернике, например, это произойдет? Бестолковые 16 потоков вместо 4 на 4-ядернике только замедлят
как уже написал смит, с этим разберется система, особенно после появления в мире ПК многоядерного рейтинга.
Я бы вообще организовал пул с очередью данных, где пул содержит 8 потоков, где каждый получает 1/8 файла, а так же пул содержит очередь данных где уже все разбито по 1/8, а потоки только занимают обработкой своего куска и выдают результат.
А если продумать так, что потоки не ждут своих братьев, а обработал кусок и выставил бит в 0 или 1 и пошел дальше, вообще летать все будет.


Цитата:
Привет. Такой вопрос. Как лучше хранить изображения для нейросети? Изображения черно-белые. Сейчас храню в .txt списком. Каждая строка - 513 символов, где 513 - значение. Строка состоит из 0 и 1.. Доступ быстрый, но при 100 потоках вылезает EOutOfResources - Error creating window device context..
I/O операции самые медленные. Используйте СУБД SQLite в купе с транзакциями.
СУБД позаботится о быстрой выборке данных, а транзакции обеспечат быструю запись в файл независимо от кол-во данных (50 млн. строк данных, транзакцией записывается примерно за 3-5 сек.).

На счет
Код:
EOutOfResources - Error creating window device context
показывайте код, что-то вы там совсем намудрили.

Последний раз редактировалось Человек_Борща; 16.02.2016 в 13:32.
Человек_Борща вне форума Ответить с цитированием
Старый 16.02.2016, 13:56   #18
Pavia
Лис
Старожил
 
Аватар для Pavia
 
Регистрация: 18.09.2015
Сообщений: 2,409
По умолчанию

Smitt&Wesson
Цитата:
Поток, это задание!
Да, так может сказать тот, кто дело не имел с потоками.
Потоки сродни задачам. Но не равны им.
Разница хорошо показано в книге: Там одна глава посвещена задачам другая потокам.
К. Хьюз, Т. Хьюз-Параллельное и распределенное программирование с использованием C++-Вильямс (2005).djvu

Один поток может выполнять много задач. К примеру при помощи очереди команд(задач).


Цитата:
Сообщение от Smitt&Wesson Посмотреть сообщение
Перевернул всё с ног на голову! (Ну, не ты единственный).

Традиционный вопрос на программёрсе: Чё курим? Не! Я такого не хочу! Мне и водки хватает за глаза!
Современные операционные системы. 2-е изд. Эндрю Тенебаун.
Там прекрасно рассказано почему потоки не могут спать спокойно.

Что касается 650 поток в системе, то подели их на 50 процессов получишь 13 потоков на процесс.

Что вполне уживается. Но как только потоков становиться около 100 в одном процессе, то они начинают мешать друг другу. Притом так, что производительность падает ниже случая последовательного исполнения задач.

Тест на 2хпроцессорной системе времён 200х годов.

Наибольшую производительность показывает числе потоков 2 и правильной архитектуре программы.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
У дзен программиста программа делает то что он хотел, а не то что он написал .
Pavia вне форума Ответить с цитированием
Старый 16.02.2016, 14:16   #19
Smitt&Wesson
Старожил
 
Аватар для Smitt&Wesson
 
Регистрация: 31.05.2010
Сообщений: 13,543
По умолчанию

Цитата:
Сообщение от Pavia Посмотреть сообщение
Smitt&Wesson
Да, так может сказать тот, кто дело не имел с потоками.
Ха-ха-ха. Насмешил . Ну, да ладно. Ты ведь лучше меня знаешь, имел я дело с потоками или не имел .
Но, если говорить о МАКСИМАЛЬНОМ быстродействии. Винду, нужно полностью исключить из процесса (её супервизор, имеет привилегированный статус). Исключить запросы прерываний и ПДП. Что остаётся? А ни чего не остаётся. Остаётся аппаратная часть без нифига. Пишем под неё на Асме, всё, что пожелаем. Без супервизора, да. Остаётся два ядра. Организуем на каждое по потоку (который уже и не поток). Просто грузим эти два ядра своими кодами. И получаем, полную Ж проблемм, зато можем сказать - Во! Я добился максимального быстродействия!
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder

Последний раз редактировалось Smitt&Wesson; 16.02.2016 в 14:28.
Smitt&Wesson вне форума Ответить с цитированием
Старый 16.02.2016, 20:38   #20
darkwellroad
Пользователь
 
Регистрация: 01.09.2013
Сообщений: 83
По умолчанию

Блин, ну и срач вы тут развели... Сори за оффтоп. Тему можно наверно закрывать.. Буду писать дальше. И кстати... Как организовать пул из изображений без критической секции?
darkwellroad вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Нейросети stdensa Фриланс 1 11.10.2014 17:23
нейросети в делфи. annuchka Помощь студентам 0 23.12.2013 17:51
нейросети С# Екатерина777 Помощь студентам 0 18.12.2012 22:01
Нейросети Kuzma_ua Общие вопросы C/C++ 0 04.02.2011 00:57
Scilab + нейросети dox07 Помощь студентам 0 08.01.2011 18:28