![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
TThread
dmk © (2016-07-05 22:15:00)Всем привет, подскажите пожалуйста, возможно ли заставить выполнить потоки в строгой последовательности и в то же время, чтобы простоев (ожиданий) не было.
В данный момент неизвестно, какой поток придет первый, а какой последний.
Delphi XE6.
гнек (2016-07-06 23:09:00) [21]Удалено модератором
tyui (2016-07-06 23:04:00) [22]некоторые линии рисуются после тех которые должны быть поверх.
в массиве это лежит все в строгой последовательности и в нужном порядке наложения.
из массива нужно убрать все линии которые не должны быть поверх.
после этого можно сделать не 12, а 120 потоков, которые нарисуют все не в 6 а в 600 раз быстрее. и синхронизировать их не потребуется.
dmk (2016-07-06 21:37:00) [23]>Впрочем, мне похрен.
Зачем влезли и пометили территорию тогда?
Kilkennycat (2016-07-06 21:35:00) [24]У адобе чего? фотошопа? там по-другому. Иллюстратора? там тоже по-другому. Да и не процессор занимается растеризацией.
Впрочем, мне похрен.
dmk (2016-07-06 21:30:00) [25]>Так что (и совершенно без желчи) спрошу тоже:
>Вы когда-нибудь векторные программы видели?
Работаю в множестве векторных программ и пишу свою.
На самом деле мне нужна вся мощь процессора для растеризации.
У адобе также сделано.
Kilkennycat (2016-07-06 20:37:00) [26]
> Математики гораздо меньше — 1-2% максимум. Остальное отрисовка.
если математики так мало, то многопотчность не нужна. Нужно совершенно иное.
Вы где-то лукавите и обманываете нас. Возможно, и себя.
Kilkennycat (2016-07-06 20:35:00) [27]
> Вы когда нибудь векторные программы видели? Тогда не должно
> быть вопросов.
не только видел, но и участвовал в создании.
цитирую:
в потоках рисуется десятки тысяч линий по одним и тем же координатам
вопрос остался. зачем? я не увижу даже две линии по одним и тем же координатам. Ну,я могу поверить, что их там две, или мильен. но не увижу.
Предположу, что это оговорка. Тогда вопрос: мой монитор имеет разрешение 1366х768
Насколько хорошо увижу я десяток тысяч линий?
Так что (и совершенно без желчи) спрошу тоже: Вы когда-нибудь векторные программы видели?
dmk (2016-07-06 20:17:00) [28]NoUser © (06.07.16 17:25) [31]
Уже все синхронизировано. Не переживайте.
Kilkennycat © (06.07.16 18:43) [32]
Математики гораздо меньше — 1-2% максимум. Остальное отрисовка. Специально замерял.
Откуда столько желчи форумчане? Вроде читаешь посты - все адекватные, а тут на тебе.
Как веслом по голове и почти ни одного дельного совета или намека.
>Но я все равно не понимаю, зачем рисовать
>одну линию поверх другой да еще тыщу штук?
Вы когда нибудь векторные программы видели? Тогда не должно быть вопросов.
гне (2016-07-06 18:58:00) [29]Удалено модератором
Kilkennycat (2016-07-06 18:43:00) [30]когда мне приходилось выжимать скорось отрисовки,я тож изобретал супер-пупер алгоритм. Пока один умный человек не сказал мне, что вся математика - это лишь 10% от скорости отрисовки, и если я не хочу мерцать экраном, то собака зарыта не в алгоритме... после чего мне стало пофиг на просчет, всё было сосредоточено на буферизацию и оптимизацию вывода изображения.
Но я все равно не понимаю, зачем рисовать одну линию поверх другой да еще тыщу штук?
NoUser (2016-07-06 17:25:00) [31]> dmk © Странно.
Лишние кал-лории в коде + HyperThreading.
> Меняется очередность линий и получается легкое мерцание и неправильная картинка.
Ну да, ну да, - слова очередь (синхронизация) и буфер (экрана) ещё ждут своего глубинного познания. )
vgf (2016-07-06 17:23:00) [32]Удалено модератором
dmk (2016-07-06 17:06:00) [33]Мне их вообще то запускать в определенной последовательности надо, а не последовательно работать один за другим. Работают они параллельно, но с задержкой запуска примерно в 1 мс. Собственно мне это и нужно было. Все нормально. Алгоритм специфический. Подходит не для всех условий. Для другой отрисовки нужно пересматривать алгоритм. Я же не гуру по потокам и не выпендриваюсь, что нашел универсальное решение. Вы что то перепутали. Тут просто опытом обмениваются и идеями.
vgf (2016-07-06 16:40:00) [34]два потока естествеено нарисуют мазанину быстрее чем один поток.
ЕСЛИ БУДУТ РАБОТАТЬ ПАРАЛЛЕЛЬНО не ожидая друг друга каждый свою половину мазанины.
но если запустить их последовательно то один единственный нарисует бысьрее чем два
vgf (2016-07-06 16:36:00) [35]это не результаты а фигня.
так как не видно что эн потоков работали ПОСЛЕДОВАТЕЛЬНО
dmk (2016-07-06 16:27:00) [36]>и будет это ВСЕГДА МЕДЛЕННЕЕ чем если бы поток был один
Странно. Вот результаты:
1 поток - 1200 точек - 3.8 сек.
12 потоков - 1200 точек - 2.02 сек.
Ускорение = 1.8
1 поток - 6000 точек - 16.44 сек.
12 потоков - 6000 точек - 3.84 сек.
Ускорение = 4.28
1 поток - 12000 точек - 32.36 сек.
12 потоков - 12000 точек - 5.89 сек.
Ускорение = 5.49
1 поток - 24000 точек - 63.76 сек.
12 потоков - 24000 точек - 10.34 сек.
Ускорение = 6.16
1 поток - 60000 точек - 158.39 сек.
12 потоков - 60000 точек - 23.94 сек.
Ускорение = 6.61
vgf (2016-07-06 15:47:00) [37]Удалено модератором
Ринсвинд (2016-07-06 15:09:00) [38]Теоретически, если есть цепочки операторов A и B, то они могут выполниться быстрее в двух последовательно запускаемых потоках, чем в одном потоке в том случае, если этот один поток - главный, и во время операций A и B идет переключение на обработку потока сообщений приложения (Application->ProcessMessages) и эта обработка занимает много времени. Если вспомогательные потоки лишены вызовов Application->ProcessMessages (не знаю, допустимы ли они там вообще, и, скорее всего, даже если допустимы, то сообщения все равно будут обрабатываться в главном потоке), то они могут отработать быстрее.
> vgf (06.07.16 14:50) [23]
Если вы не в состоянии предположить описанный мною вариант, то стоит ли ругаться, да еще выбирая из богатого русского мата такие примитивные выражения?
vgf (2016-07-06 14:50:00) [39]Удалено модератором
dmk (2016-07-06 14:48:00) [40]Удалено модератором