Страницы: 1
RSS
Вопрос знатокам VBA и железа.
 
Добрый день!  
 
Нигде в инете не нашел, может кто знает:  
 
Почему скорость работы макроса вообще никоим образом не различается на core 2 duo E8400 процессоре и на супер-новом i7-2700K? Очень обидно.  
 
Может кто знает, почему? Помогите, пожалуйста.  
 
С уважением,
 
Почему скорость не отличается, сказать не могу, не увидев код.  
Вообще, не всё зависит от производительности центрального процессора.  
 
Вы бы лучше выложили здесь свой файл Excel с кодом - глядишь, скорость работы макроса увеличилась бы во много раз  
(придумали бы, как его оптимизировать)
 
Да, The_Prist, видимо, прав. Я так и предполагал, но боялся признаться :)  
 
Жаль, конечно, что VBA не может задействовать всю мощь процессора.  
 
А то, что можно оптимизировать код - благодарю за предложение. Наведу порядок в файле, выложу.  
 
Благодарю за поддержку!  
 
С уважением,
 
Я тоже так думал. Только у меня метер показывает работу всех ядер, при чем во всех 3-х последних версиях Экса. И пробовал на разных метерах.
Я сам - дурнее всякого примера! ...
 
Тоже думаю, что если б код выполнялся 5 секунд - такой вопрос и не поднялся бы :)  
И у меня тоже работают оба ядра, и это даже не зависит от настроек в Экселе (2007) - есть лишь небольшая разница, когда включены многопоточные вычисления формул, то загрузка ровнее, когда выключены - одно ядро вроде чуть больше загружено.
 
Да, что-то непонятно все-таки. Ядра загружены, причем не сильно-то как-то, и скорость все равно одинаковая, что на двух-ядерном E8400, что на 4-х ядерном i7-2700. И как ускорить, не оптимизируя код макроса - непонятно.  
<EM><STRONG>Файл удален</STRONG> - велик размер - [<STRONG>МОДЕРАТОРЫ</STRONG>]</EM>
 
{quote}{login=}{date=26.02.2012 07:43}{thema=}{post}Да, что-то непонятно все-таки.{/post}{/quote}  
The_Prist, не просто "видимо, прав", а абсолютно прав.  
VBA работает только на одном ядре.  
Остальные при этом могут быть заняты операционкой и/или другими приложеними.  
Скорость обработки VBA-кода можно (немного) поднять увеличением тактовой частоты процессора, уровня приоритета приложения. А правильно и наиболее эффективно - оптимизацией кода.
 
Владимир, чем тогда объяснить то, что у меня на картинке?
Я сам - дурнее всякого примера! ...
 
{quote}{login=KukLP}{date=27.02.2012 08:43}{thema=}{post}Владимир, чем тогда объяснить то, что у меня на картинке?{/post}{/quote}Сергей, да кто ж его знает, чем именно? :-)  
Другими процессами, антивирусом, приложениями, кэшированием, обращением к своп-файлу, еще чем-то. Для Vista и Win 7 есть еще и свои причины.  
Можете попробовать включить в настройках Excel вручную поддержку только одного ядра и сравнить.
 
Я включал - особой разницы нет. Так же график загрузки обоих ядер примерно одинаков. Но разница есть - если включены оба ядра, то загрузка практически одинаковая, при отключении - одно ядро загружено чуть больше второго.  
Мне по этим графикам кажется, что в 2007 VBA использует оба ядра.  
Не представляю, чем может непрерывно заниматься второе ядро с таким же рвением, как и первое на 60%, причём синхронно.
 
Согласен. Но откуда Винде взять столько задач, чтоб "уравновесить" этот "бесконечный" синтетический цикл?
 
Владимир, процессор простаивал(3%). В момент запуска макроса он начинает дрыгать всеми ядрами. С чего вдруг "Другими процессами, антивирусом, приложениями" именно в момент запуска макроса? Вот скрин с разрешенным в настройках одним ядром. Антивирус, фаервол отключил. То же, что и у Игоря. Одно ядро загружено чуть больше остальных, но задействованы все. Осмелюсь предположить, что это гиперскалярная архитектура процессора позволяет распределять нагрузку между ядрами.  Хотя во время анонсирования многоядерных процессоров, много писалось о том, что ПО должно быть написано(расчитано) для работы с несколькими ядрами, иначе смысла в мнгоядерности нет. Может какие-нить впоследствии вышедшие сервиспуки к ХР позволяют распределять нагрузку. Других объяснений у меня нет.  
Пока тестировал, появилась еще пара ответов:-)
Я сам - дурнее всякого примера! ...
 
Скрин забыл:-)
Я сам - дурнее всякого примера! ...
 
Вот это тему задал...  
 
Позволю вмешаться, но мне тоже не совсем ясно, как простаивающий процессор вдруг решает запустить все ядра именно при запуске выполнения макроса. Но при этом скорость выполнения макроса абсолютно одинакова, что на слабеньком, что на мощном компе. Во вложении наглядный пример.
 
Да, и не понятно что мешает процессору разогнаться до полной мощности, а не до 26%, как в примере.
 
На самом деле важны не ядра сами по себе, а многопоточность.  
Для приложения, которые по своей природе являются однопоточными (это в полной мере отнсится к VBA), предпочтительнее одноядерный процессор, работающий на более высокой тактовой частоте, чем многоядерный, работающей на менее высокой.  
Загрузка нескольких ядер однопоточным приложением выигрыша, в любом случае, не даст, потому что нет возможности распаралеливания (ветвления) подзадач такого приложения.
 
Intel сообщала о разработке в перспективе интеллектуальных многоядерных процессоров, в которых тактовая частота ядра, работающего с более интенсивным потоком приложения, сможет автоматически увеличиваться за счет притормаживания или даже остановки других ядер. При этом общая выделяемая можность процессора останется неизменной. Вот на таких процах VBA будет пошустрее. Но, как правило, значительно больший выигрыш можно прлучить не подобным экстенсивным методом, а оптимизацией кода.
 
Что значит, "в перспективе"?  
технология давно уже реализована:  
 http://ru.wikipedia.org/wiki/Turbo_Boost
 
от AMD:  
 http://www.3dnews.ru/news/rabota_amd_turbo_core_v_kartinkah
 
{quote}{login=subtlety}{date=27.02.2012 10:26}{thema=}{post}Что значит, "в перспективе"?  
технология давно уже реализована:  
http://ru.wikipedia.org/wiki/Turbo_Boost{/post}{/quote}  
Заглянул в тему по ссылке из другой темы.  
Да, спасибо, читал об этом давненько, когда это было перспективой :-)  
 
Пообщался тут со спецом по теме, он утверждает, что очень многоядерные процессоры сейчас не тянут типовых пока еще однопоточных задач, потому что у каждого ядра низкая тактовая частота, а разгон ядра возможет лишь незначительный, так как  запаса по перегреву стало значительно меньше.  
Например, игры на таких многоядерных процессорах идут значительно хуже, потому что все быстродействие однопоточных приложений упирается в тактовую частоту процессора.  
 
Возможно поочередное, но неодновременное использование всех процессоров для одного потока, например, по 25% для каждого из 4-х ядер, при этом локального перегрева не происходит, но быстродействие получается всего лишь, как 100% одного (слабенького) ядра.    
 
На сегодня, по его оценкам, 2-х ядерные решения для однопотоковых задач намного оптимальнее. Во-первых, их можно разогнать значительны быстрее, во-вторых, многопотоковых игр очень мало. Если Excel рассматривать как азартную игру (кто-то сомневается в этом?), то выводы напрямую применимы и к нему.  
 
Но, нужно учитывать, что большинство формул Excel 2007/2010 пересчитываются в многопоточном режиме. При этом выигрыш по некоторым оценкам примерно корень квадратный из количества ядер, а точнее - из количества потоков. Но если хоть одна функция в любой формуле не поддерживает многопоточность, или если используется пользовательская функция VBA, то весь расчет ведется уже в одном потоке.    
 
Причем первый пересчет при многопоточном пересчете формул может быть не быстрым, потому что один раз тратится время на перестройку дерева взаимосвязей под эту самую многопоточность.  
 
Сам же VBA принципиально однопоточный.  
   
Следует отметить, что пользовательские функции, написанные в виде надстроек XLL, тоже могут поддерживать многопоточность. Но это уже не VBA, а С.
 
можно распараллелить алгоритм самому :) и запустить несколько копий vba
Живи и дай жить..
 
"Например, игры на таких многоядерных процессорах идут значительно хуже, потому что все быстродействие однопоточных приложений упирается в тактовую частоту процессора."  
Да, только игры еще несколько лет назад стали писать с многопоточными движками. Так же как и рабочие приложения. Неохота вдаваться в подробности на непрофильном форуме, просто пробегитесь по этой, например, статье:  
 http://www.thg.ru/cpu/core_scaling/print.html  
Просмотрите графики.
Страницы: 1
Читают тему
Наверх