3

У меня есть Windows 8-процессор с процессором 8 ГГц, который, по оценкам, завершит вычисление с использованием Excel за 16 дней на основе выборочного теста данных. Это исполнение не приемлемо (!).

В вычислениях не используются возможности Excel, но в основном это сценарий VBA, вызывающий COM-объект с функцией калькулятора.

Процесс калькулятора использует 25% ЦП, а Excel использует 1%. Память подкачки, похоже, не используется. Поскольку процесс заключается в чтении и записи в текстовые файлы, я предполагаю, что это связано с вводом / выводом. Количество операций чтения / записи ввода-вывода постоянно учитывается во время расчета.

Проверка на вирусы установлена, но она не проверяется активно. т.е. процессор составляет 0% в течение расчетного периода.

Лучшее предложение - использовать RAM-диск.

Не могли бы вы предложить какие-либо другие пути расследования узких мест производительности?

[Потом...]

Большое спасибо за совет ниже. По сути, процесс калькулятора - это специализированный финансовый калькулятор, но, как уже упоминалось ниже, похоже, что узким местом является его использование через COM. Этот метод удаляет все многопоточные функциональные возможности, которые предлагает калькулятор, который также может быть обращен как веб-сервис.

Реальный сценарий включает обновление финансовой таблицы раз в три года с использованием этого нового калькулятора. К сожалению, недостаточно рано было зарезервировано достаточно рано в графике для оценки производительности, что привело к срочности исследования проблемы производительности. Поскольку этот расчет не выполняется на регулярной основе, нет необходимости настраивать среду, оптимизированную по скорости.

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

5 ответов5

9

Проще говоря, не используйте Excel для такого рода вещей. Возможно, вам удастся взглянуть на Службы Excel (надстройка к SharePoint), которая предназначена для выгрузки обработки, однако у меня нет опыта работы с ней.

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

Некоторые вещи, на которые стоит обратить внимание, включают SageMath, MATLAB и Mathematica, среди многих других.

4

Вероятно, нужно было бы найти лучший способ реализации вашего программного обеспечения, используя инструменты, более подходящие для высокопроизводительных вычислений, или даже язык / среду, специфичную для вашей проблемной области. Существует множество инструментов, например Mathematica, SAS, R и так далее. Кроме того, вы должны распараллелить это как можно больше.

Кроме того, избегайте максимально использовать диск. Если вы собираетесь использовать диск, помимо RAM-дисков вы должны рассмотреть возможность использования высокопроизводительного RAID-массива, такого как RAID 10, или даже лучше RAID 10, состоящего из SSD.

Вы должны профилировать ваш процесс, пока он выполняется, и посмотреть, сколько системного времени и сколько пользовательского времени. Я готов поспорить, что для выполнения всех этих дисковых операций ввода-вывода требуется много времени на выполнение системных вызовов. Избавиться от этого.

4

Вы используете 25% ЦП, потому что COM-объект является однопоточным и не использует другие ядра вашего ЦП. Вы не можете увеличить производительность ваших расчетов без изменения кода объекта COM.

Сожалею.

0

Вам просто нужен диспетчер задач:

Перейдите на вкладку «Процессы», затем в меню «Просмотр / Выбор столбцов» и отметьте одно или все:

  • Загрузка ЦП (дает процент от общего использования ЦП)
  • Память - рабочий набор (используется память)
  • i/O Reads + I/O write (подсчитывает общее количество выполненных обращений к диску)

Затем можно дважды щелкнуть (а не дважды) столбец, чтобы отсортировать его в порядке убывания значений, чтобы проверить его чрезмерное использование.

Однако, если проблема в объекте ActiveX, тогда оптимизация Excel не поможет вообще.

0

Как уже упоминали другие, вы должны изучить вопрос о переносе обработки из Excel. Объекты VBA и COM неэффективны при выполнении множества операций туда-сюда.

Лично я хотел бы отправить свои данные на сервер SQL и написать запрос там. Ваш запрос / процедура может выполнить свои вычисления и предоставить вывод в Excel, используя внешнее соединение.

Решения RDBMS достаточно эффективны в выполнении задач, о которых я никогда не мечтал бы делать в Excel или VBA, легко работая с базами данных объемом несколько ГБ и с любым количеством потоков, которые вы можете получить.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .