Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.118.1.232] |
|
Сообщ.
#1
,
|
|
|
Есть прога, умеет пользоваться только 1 ядром. Process Lasso дает ей доступ ко всем ядрам - но она берет только одно.
Как сделать так, чтобы прога думала, что 4 ядра - одно --- и загрузило весь проц на максимум? |
Сообщ.
#2
,
|
|
|
Нужно разложить прогу на потоки.
Простыми словами: Ядро процессора - это механизм, который загружает в ячейки своей памяти (регистры) данные из ячеек оперативной памяти и команды. В памяти есть набор данных, расположенных по порядку. Первыми стоят команды, затем данные для них. Процессор загружает ячейку с командой, смотрит что там за код команды и загружает в свои регистры операнды из памяти, выполняет операции над ними и возвращает назад. Регистров у него не много, мало того, они имеют свое назначение. Программа - это порядок этих команд, скажем, очередь. От выполнения одной команды зависит какими данными будет располагать следующая. Если у системы 2, 8, да хоть 128 процессоров, все они работают параллельно, но с одинаковой частотой! А значит другой процессор для ускорения выполнения задач в системе может выполнять что-то другое. Одну и ту же программу по кускам всеми потоками выполнять нельзя, получится хрень. Исключением является разделение на потоки, когда программист решает как разделить задачу так, чтобы ее могли выполнять два, десять процессоров... И контролирует сбор результатов их выполнения. Так же считается, что процессор с 2 ядрами и частотой 3.2 быстрее процессора с 8 ядрами и частотой 1.6. |
Сообщ.
#3
,
|
|
|
Цитата simsergey @ Так же считается, что процессор с 2 ядрами и частотой 3.2 быстрее процессора с 8 ядрами и частотой 1.6. "Так же считается, что процессор с 2 ядрами и частотой 3.2 быстрее процессора с 8 ядрами и частотой 1.6. " - а вот это совсем не понял... |
Сообщ.
#4
,
|
|
|
Наверняка подразумевалось 4 ядра, а не 8. Или как?
|
Сообщ.
#5
,
|
|
|
Цитата Славян @ Наверняка подразумевалось 4 ядра, а не 8. Или как? Да пусть хоть 8, хоть 2. Все равно программа занимает только 1 ядро винды. Реальное/виртуальное - не важно. |
Сообщ.
#6
,
|
|
|
Цитата Сергей85 @ Если в той фразе всё же 4 ядра, то идея такая: хоть и 2*3,2 = 6,4 = 4*1,6 но всё же задачу ещё надо разбросать на эти ядра, плюс всякая синхронизация, сбор данных из этих разных ядер, что выльется (в среднем) в небольшое проигрывание 4-рёх медленных ядер двум быстрым. вот это совсем не понял... |
Сообщ.
#7
,
|
|
|
Цитата Славян @ Хорошая догадка Если в той фразе всё же 4 ядра, то идея такая: хоть и 2*3,2 = 6,4 = 4*1,6 но всё же задачу ещё надо разбросать на эти ядра, плюс всякая синхронизация, сбор данных из этих разных ядер, что выльется (в среднем) в небольшое проигрывание 4-рёх медленных ядер двум быстрым. Я просто хотел сказать, что для однопоточного приложения важнее скорость процессора, чем количество его ядер. Сергей85, нет в природе программы, которая делает то, что Вы хотите. И быть не может. Исключением является VirtualBox, было замечено за ним некое ускорение работы, если на многоядерной машине создать виртуальную машину с одним ядром, то софт внутри этой виртуалки шевелится побыстрее. Научного объяснения этому феномену не могу дать, т.к. нет цифр для сравнения. А можно поинтересоваться, чем занимается таким программа, что загружая ядро на 100% она не успевает сделать то, что нужно? Мимо меня проходило не мало программ, и они в реальном времени обрабатывали задачи, загружая ядро на несколько процентов.. |
Сообщ.
#8
,
|
|
|
Цитата Сергей85 @ Есть прога, умеет пользоваться только 1 ядром. Process Lasso дает ей доступ ко всем ядрам - но она берет только одно. Как сделать так, чтобы прога думала, что 4 ядра - одно --- и загрузило весь проц на максимум? Переписать программу, добавив поддержку многоядерности. Если исходников нет, можно запустить 4 копии программы параллельно: каждая копия будет считать свою независимую задачу. |
Сообщ.
#9
,
|
|
|
Цитата simsergey @ Это скорее всего за счёт того, что программная эмуляция некоторой аппаратуры работает быстрее, чем сама эмулируемая аппаратура. Обычно за счёт того, что эмулируемые задержки меньше, чем реальные. На одной из версий была ошибка с установкой W2K из-за того, что установщик не мог дождаться установки какого-то флага, поскольку тот успевал подняться и сняться до того, как установщик начинал его опрашивать.VirtualBox, было замечено за ним некое ускорение работы, если на многоядерной машине создать виртуальную машину с одним ядром, то софт внутри этой виртуалки шевелится побыстрее. Цитата Pacific @ Я обычно, чтобы с многопоточностью не возиться, именно так и поступаю. Пишу программу в один поток, и запускаю несколько копий в-параллель, каждую со своими данными. Главное, чтобы у них ввода-вывода было не слишком много. можно запустить 4 копии программы параллельно: каждая копия будет считать свою независимую задачу. |
Сообщ.
#10
,
|
|
|
[QUOTE=simsergey,1483381310,3700639][quote=Славян,1483380616,3700637]
Исключением является VirtualBox, было замечено за ним некое ускорение работы, если на многоядерной машине создать виртуальную машину с одним ядром, то софт внутри этой виртуалки шевелится побыстрее. Научного объяснения этому феномену не могу дать, т.к. нет цифр для сравнения.[/QUOTE] Генерация чисел по определенным алгоритмам программа делает. А о виртуалбоксе - дело не в ядрах, а, действительно, в эмуляции. Винда ставится на одном и том же одноядерном ПК медленнее, чем на виртуалбоксе в нем самом. Добавлено "можно запустить 4 копии программы параллельно: каждая копия будет считать свою независимую задачу." - так и придется. |
Сообщ.
#11
,
|
|
|
Цитата Сергей85 @ Как сделать так, чтобы прога думала, что 4 ядра - одно --- и загрузило весь проц на максимум? В общем случае никак. Добавлено Цитата simsergey @ то софт внутри этой виртуалки шевелится побыстрее Делал именно так. Заметного "ускорения" не увидел. |
Сообщ.
#12
,
|
|
|
Цитата shm @ Там ускорение небольшое, и, главное, не постоянное. Иногда работает так же, иногда чуть быстрее или медленнее, практически незаметно. А иногда такое ускорение/замедление заметно даже на глаз. Замедление от виртуалки вполне ожидаемо, поэтому на него внимания обычно не обращают. А вот ускорение запоминается. Делал именно так. Заметного "ускорения" не увидел. |
Сообщ.
#13
,
|
|
|
А для чего это нужно?
|