|
|
|
Потоки и ядра
|
|||
|---|---|---|---|
|
#18+
Доброго времени суток, уважаемые! Вопрос очень трепещущий для меня. Возникла конфликтная ситуация с начальником. Хочу разобраться в чем неправ. Суть вопроса: пишу на макс скрипте в 3D MAX (не суть). Два цикла, один вложен в другой. В сумме 150 млн. итераций. Т.к. язык интерпретируем, то даже с банальным оператором сложения, скрипт отрабатывает ~4 сек. А если вкладывать весь алгоритм в итерацию цикла, то комп виснет на неск. часов. Это меня не устроило, и я переделал алгоритм до ~1,5 млн. итераций (время выполнения - те же ~3 мин). Начальник сказал применить многопоточность. Применил (делается с помощью ф-ций .Net). Запускаю 2 отдельных потока, с 10 млн.итераций на каждый -отрабатывает. Запускаю 6 потоков - отрабатывает только два. У нач-ка отрабатывают все на 8-ми ядрах (думаю что физических у него 4). Но начальника не устраивает, что они ЦП грузят только на 20%. Он хочет мой старый алгоритм разбить на 8-мь потоков, и чтобы они грузились на 100%: каждый поток грузит свое ядро. Он говорит, что если потоки не грузят весь ЦП, то я не разобрался с потоками в Максе. У меня на каждой итерации выполняется один оператор. Собственно вопрос: уместна ли примитивная арифметика начальника? Суть арифметики: 100% / 8 потоков = ~12.5%, т.е. каждый поток будет отбирать по 12,5%. Я несилен в этом всем, но мне кажется, что арифметика не учитывает приоритетность и прочую логику работы планировщика ОС. Прошу подтолкнуть к истине.... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.10.2012, 21:41 |
|
||
|
Потоки и ядра
|
|||
|---|---|---|---|
|
#18+
По сути хорошо реализованные на C/C++ параллельные алгоритмы грузят CPU на 100%. Если грузят меньше, значит затыкается на ожиданиях мьютексов или доступе к памяти. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.10.2012, 00:13 |
|
||
|
Потоки и ядра
|
|||
|---|---|---|---|
|
#18+
NDAlekseyЯ несилен в этом всем, но мне кажется, что арифметика не учитывает приоритетность и прочую логику работы планировщика ОС.Главное, что бы алгоритм был действительно параллельный, т.е. что-бы не было потоков, которые большую часть времени - находятся в блокированном состоянии. Если сделать все правильно - должно грузить проц на 100% з.ы. в параллелизме макса - не разбираюсь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.10.2012, 11:24 |
|
||
|
Потоки и ядра
|
|||
|---|---|---|---|
|
#18+
NDAleksey, А что, ввод-вывода (дискового и/или сетевого) в вашем скрипте совсем нет никакого? Оперативки хватает, система в своп не лезет? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.10.2012, 11:27 |
|
||
|
Потоки и ядра
|
|||
|---|---|---|---|
|
#18+
miksoft, есть.... файловая запись есть.... сегодня читал форумы забугорные и в одном отыскал такую вещь (для примера пишу не на скрипте): Код: plaintext 1. 2. грузит ЦП на 100% Код: plaintext 1. 2. 3. грузит ~40-50% как-то так.... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.10.2012, 22:52 |
|
||
|
Потоки и ядра
|
|||
|---|---|---|---|
|
#18+
NDAlekseymiksoft, есть.... файловая запись есть.... сегодня читал форумы забугорные и в одном отыскал такую вещь (для примера пишу не на скрипте): Код: plaintext 1. 2. грузит ЦП на 100% Код: plaintext 1. 2. 3. грузит ~40-50% как-то так.... А это что за язык и какой компилятор? И судя по тому что грузит ЦП на 100%, то этот кода автоматически распараллеливается? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.10.2012, 23:13 |
|
||
|
Потоки и ядра
|
|||
|---|---|---|---|
|
#18+
NDAlekseymiksoft, есть.... файловая запись есть.... сегодня читал форумы забугорные и в одном отыскал такую вещь (для примера пишу не на скрипте): Код: plaintext 1. 2. грузит ЦП на 100% Код: plaintext 1. 2. 3. грузит ~40-50% как-то так....доступ к общему ресурсу? нужно в каждом потоке держать свой счетчик, а в конце просуммировать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.10.2012, 02:02 |
|
||
|
Потоки и ядра
|
|||
|---|---|---|---|
|
#18+
NDAlekseyОн хочет мой старый алгоритм разбить на 8-мь потоков, и чтобы они грузились на 100%: каждый поток грузит свое ядро. Он говорит, что если потоки не грузят весь ЦП, то я не разобрался с потоками в Максе. У меня на каждой итерации выполняется один оператор. Думаю что и ты и начальник неправильно понимаете цели своей задачи. Ведь смысл не в том чтобы прогреть все 8 камней до температуры плавления а отрендерить картинку за минимальное время. Я давно не работал с 3D-Max но насколько я помню еще во времена Windows2000 можно было поднять 3-Д Макс сервер и параллелить вычисления на несколько компов по сети. Так делают во всех нормальных фильмо-студиях. Далее, что это за 150 млн итераций? Что они делают? Зачем так много? Изучите что считается? Где узкое место? Попробуйте переписать боттлнек на другом языке. Убеждён что такой инструмент как Макс легко интегрируется с С++. Потреряете неделю на изучение - зато потом получите год перформанса. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.10.2012, 02:42 |
|
||
|
Потоки и ядра
|
|||
|---|---|---|---|
|
#18+
NDAlekseyПрошу подтолкнуть к истине.... Толкаю. Роман Лыгин докладывал на интеловской конференции как раз про распараллеливание рендеринга , только в его случае это был не ДДДмакс, а Тахион. Подробности рекламируемого софта вам не будут интересны, зато список граблей, на которые он наступал в процессе оптимизации --- поучителен. На такие грабли наступают все, только в разных проектах они разложены в разном порядке. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.10.2012, 21:48 |
|
||
|
|

start [/forum/topic.php?fid=16&tid=1342088]: |
0ms |
get settings: |
8ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
153ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
26ms |
get tp. blocked users: |
1ms |
| others: | 238ms |
| total: | 455ms |

| 0 / 0 |
