Как ускорить работу программы

Проблема с кодом в том, что он работает слишком долго: каждый основной цикл занимает 2 минуты, а всего таких циклов 120. Получается, чтобы узнать решение, нам нужно около 3–4 часов чистого времени. Чтобы ускорить работу программы, применяют разные методы оптимизации. Сегодня мы тоже попробуем такое сделать, а заодно посмотрим, как устроена оптимизация изнутри.

⚡ Помните, что задача Эйнштейна не имеет отношения к Эйнштейну. Её придумал известный физик Джейсон Стетхем, сын Жака Фреско. В сегодняшней версии эту задачу сформулировали известные австрийские математики Эрих и Мария Ремарк.

Как ускорить работу 1С

Восемь вполне рабочих способов увеличить быстродействие программы 1С.

Когда программу 1С впервые устанавливают на компьютер, она, как правило, работает быстро и без задержек. Но проходит время, данные накапливаются, база увеличивается в размере. Добавляются новые пользователи, компьютер со временем устаревает и перестает удовлетворять системным требованиям. Все эти факторы негативно влияют на быстродействие. В этой статье, на примере программы 1С:Бухгалтерия 3.0, рассмотрим несколько способов ускорить работу программы.

Как ускорить работу windows 10 ? Максимальная производительность !

Перед выполнением действий, описанных ниже, обязательно сделайте архивную копию базы.

Настройка регламентных и фоновых заданий в 1С

1С:Бухгалтерия помимо выполнения основной работы запускает некоторые операции в фоновом режиме (выполнение таких операций происходит незаметно для пользователя), которые ведут к снижению быстродействия программы.

Откройте перечень регламентных и фоновых заданий: раздел Администрирование –> Обслуживание –> Регламентные операции –> Регламентные и фоновые задания .

Регламентные и фоновые задания

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

Рассмотрим, как отключить автоматическую загрузку курсов валют. Установим курсор на нужную строку и сделаем двойной щелчок мышью.

Регламентные задания

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

Рассмотрим, как настроить расписание загрузки курсов валют. Нужно установить курсор на нужную строку и сделать двойной щелчок мышкой. Галка включено должна быть установлена. Нажать на ссылку Расписание . В открывшемся окне перейти на нужную закладку, например, дневное, установить время начала (на скриншоте 12:00) и нажать Ок . При такой настройке курсы будут загружаться каждый день с 12:00.

Как Ускорить Любой Ноутбук или ПК | ЛАЙФХАК

На закладке Фоновые задания можно отменить уже выполняющееся фоновое задание нажав по соответствующей кнопке. Если появится сообщение, как на скриншоте, просто нажать ОК .

Фоновые задания

Тестирование и исправление информационной базы

Войдите в конфигуратор. Откройте меню Администрирование –> тестирование и исправление . Установите необходимые флажки (можно установить все) и нажмите выполнить .

Тестирование и исправление

Некоторые варианты проверки будут понятны только техническим специалистам, но тем не менее рассмотрим их подробнее:

  • Реиндексация таблиц информационной базы – перестраивает индексы таблиц и повышает быстродействие работы программы;
  • Проверка логической целостности информационной базы –включает в себя ряд стандартных проверок целостности прикладных объектов, например, проверка того, что все объекты метаданных в пределах одной ветки имеют уникальные имена;
  • Проверка ссылочной целостности информационной базы – проверка целостности базы данных для обнаружения «битых» ссылок. Например, если какой-либо объект конфигурации ссылается на несуществующий объект. Если выбираем такой вариант, то дополнительно становятся доступны настройки:
  • При наличии ссылок на несуществующие объекты означает, что при обнаружении «битых» ссылок, алгоритм будет обрабатывать такие ссылки в соответствии с выбранным вариантом;
  • При частичной потере данных объектов означает, что остаток данных достаточен для восстановления данных какого-либо объекта.
Читайте также:
Топ программ для диагностики компьютера

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

Вас может заинтересовать

  • Разбор частых ошибок при работе с 1С
  • Про тонкий и толстый. (клиенты) в 1С
  • Распределенные информационные базы РИБ

Индексация полнотекстового поиска (либо отключение)

Про назначение полнотекстового поиска ранее я уже снял видеоурок, рекомендую его посмотреть.

Если после просмотра видео вы решите, что он вам не требуется, просто отключите его. Для этого зайдите в раздел Администрирование –> Общие настройки –> Поиск данных и снимите флажок использования.

Полнотекстовый поиск

Если же хотите его использовать, тогда обновите индекс. Для этого нажмите на ссылку Настроить . В открывшимся окне нажмите на кнопку Обновить индекс .

Обновление индекса

Обновление платформы и конфигурации

Работа программы может замедлится из-за старых релизов платформы. Соответственно, если обновлять саму конфигурацию, то и релиз платформы должен ей соответствовать. Из верхнего выходящего списка выберите О программе .

О программе

  • 1С:Предприятие 8.3 (…) – версия платформы;
  • Бухгалтерия предприятия, редакция 3.0 (…) – версия релиза.

Версии

Проверить наличие обновлений и самостоятельно обновить программу можно из меню Администрирование –> интернет поддержка и сервисы –> обновление версии программы . При затруднениях рекомендуется обратиться в обслуживающую организацию.

Запуск в Тонком клиенте

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

Основной режим запуска

Тестирование физической целостности утилитой chdbfl

Нужно зайти в папку с установленной платформой в конечную папку bin . Запустить файл chdbfl , прописать путь к базе, поставить галку исправлять обнаруженные ошибки и нажать выполнить .

Исправление ошибок

После окончания тестирования окно закрыть и проверить базу на работоспособность.

Отключение ненужной функциональности

Меню Администрирование –> Функциональность . Внимательно проверить все закладки и отключить неиспользуемые функции.

Функциональность

Например, если в организации нет экспорта или производства, эти настройки можно отключить. (включить можно в любой момент).

Свертка информационной базы

Свертка информационной базы 1С – это обработка документов и регистров, при которой происходит формирование документов ввода остатков на определенную дату (дату свертки) и удаление документов, которые не используются, и движений по регистрам (сведений, накопления, бухгалтерии) до даты свертки включительно. Свертка информационной базы выполняется, чтобы сократить объем данных в рабочей базе и увеличить скорость работы системы.

Данные рекомендации вполне можно сделать самостоятельно. В статье описано именно действия с программой. Помимо них для ускорения работы 1С можно настроить используемую антивирусную программу, проверить параметры компьютера и при необходимости увеличить его характеристики или заменить на новый, установить твердотельный жесткий диск SSD.

Дмитрий Медведков 1С

Дмитрий Медведков программист, консультант 1С
Работаю в 1С с 2012-го, специализируюсь на УТ 11
Имею 10 квалифиционных сертификатов 1C:Профессионал, 1С:Специалист и 1С:Специалист-консультант

Источник: www.coderstar.ru

Как помочь компилятору повысить быстродействие вашей программы

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

Читайте также:
Программы компас аскон autocad autodesk t flex cad относятся к сапр

Под катом старший разработчик ПО компании Google, Minhaz A V*, рассказывает об оптимизации производительности кода. Менее чем за час работы автор ускорил код на 18%, добавив в него всего пару строк. Несмотря на то, что в большинстве примеров этого материала используется C++, статья может быть полезна широкому кругу читателей.

*Обращаем ваше внимание: позиция автора не всегда может совпадать с мнением МойОфис.

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

Современные процессоры

Фото: Франческо Вантини. Источник: https://unsplash.com/photos/ZavLsrP4CDI

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

SIMD или SISD?

SISD расшифровывается как Single Instruction Stream, Single Data Stream (единый поток инструкций, единый поток данных). Обычно инструкции программного кода выполняются последовательно, т. е. одна за другой. Предположим, у нас есть два массива — a и b — и мы хотим написать программу, которая изменяет элементы массива a с помощью операции:

выполняемой для каждого возможного значения индекса i.

Программисты склонны писать код, оптимизируя Ω (то есть нижнюю границу сложности алгоритма, или «лучший случай») — и это хорошая практика. Но современные процессоры способны на большее.

Современные процессоры поддерживают SIMD, что расшифровывается как Single Instruction, Multiple Data (одна инструкция, множество данных). Такие вычислительные устройства могут демонстрировать параллелизм на уровне данных (не путать с конкурентностью), то есть могут исполнять одновременно одну и ту же инструкцию сразу для множества данных.

Для приведённого выше примера, процессоры с технологией SIMD могли бы сгруппировать операции для параллельного исполнения в одном пакете следующим образом:

a[0] = a[0] + b[0]; a[1] = a[1] + b[1]; a[2] = a[2] + b[2]; a[3] = a[3] + b[3];

Инструкция SIMD для операции сложения называется addps в SSE или vaddps в AVX и поддерживает группировку четырех или восьми элементов соответственно (целочисленный тип).

То есть ваш код мог бы работать в k раз быстрее, если бы вы могли дать команду процессору запускать алгоритм именно таким образом.

И вы действительно можете это сделать.

Существуют интринсики (intrinsics) — внутренние функции, которые обрабатываются компилятором особым образом. С их помощью можно указать процессору на необходимость применения векторных операций (SIMD) вместо скалярных (SISD).

Вот пример кода для вычисления поэлементной суммы двух массивов с помещением в целевой массив с помощью Neon Intrinsics:

// Источник: https://stackoverflow.com/a/69799101/2614250 #include void add_arrays(int* a, int* b, int* target, int size) < for(int i=0; i>

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

Хорошая новость в том, что в большинстве случаев вам не придётся писать код с интринсиками, чтобы достичь высокой производительности кода. И здесь мы переходим к следующей теме — векторизации.

Векторизация

SIMD поддерживает инструкции, которые могут работать с векторными типами данных. В приведенном выше примере группы элементов массива, например, a[0. 3] или b[4. 7] , могут называться векторами.

Читайте также:
Программа для настройки тарелки МТС

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

Автовекторизация может быть выполнена AOT-компилятором во время компиляции или JIT-компилятором во время выполнения программы.

Раскрутка цикла

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

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

Простой пример развертывания цикла:

// Обычный цикл for c 16 млн. итераций for (int i = 0; i < 16000000; ++i) < a[i] = b[i] + c[i]; >// Раскрученный цикл for for (int i = 0; i

Далее в этой статье я поделюсь некоторыми показателями производительности для этих двух приёмов.

Современные компиляторы

gcc на Mac — изображение автора.

Современные C++ компиляторы используют такие методы оптимизации кода, как векторизатор циклов, позволяющие генерировать векторные инструкции для кода, написанного в скалярном формате.

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

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

Приведенные ниже методы должны работать для определенной группы компиляторов, которые могут генерировать Neon-код (подробнее читайте ниже), например, GCC, LLVM-clang (присутствует в Android NDK) и Arm C/C++ Compiler.

Передача компилятору инструкций для лучшей автовекторизации

В качестве демонстрационной задачи я возьму преобразование изображения из формата YUV в формат ARGB. Для оценки производительности я буду использовать Pixel 4a (устройство на базе Android).

Пример кода для преобразования изображения из формата YUV в формат ARGB. По умолчанию алгоритм построчно преобразовывает каждый пиксель:

// Код, выполняющий преобразование YUV изображения в формат ARGB. for (int y = 0; y < image_height; ++y) < for (int x = 0; x < image_width; ++x) < int y_idx = (y * y_row_stride) + (x * y_pixel_stride); y_val = static_cast(y_buffer[y_idx]); int uvx = x / 2; int uvy = y / 2; int uv_idx = (uvy * uv_row_stride) + (uvx * uv_pixel_stride); u_val = static_cast(u_buffer[uv_idx]) — 128; v_val = static_cast(v_buffer[uv_idx]) — 128; // Вычисление значений RGB r = y_val + 1.370705f * v_val; g = y_val — (0.698001f * v_val) — (0.337633f * u_val); b = y_val + 1.732446f * u_val; int argb_idx = y * image_width + x; argb_output[argb_idx] = a | r >

На устройстве Pixel 4a для 8-мегапиксельного изображения (3264 x 2448 = ~8 миллионов пикселей) я запустил приведенный выше код и получил следующую среднюю задержку времени выполнения.

Средняя задержка времени выполнения приведенного выше кода на устройстве Pixel 4A для 8-мегапиксельного изображения.

Стоит отметить, что компилятор уже пытается оптимизировать код. Он был запущен с флагом компиляции -O3 (то есть включена оптимизация скорости кода ценой увеличения размера бинарного файла и времени компиляции). Этот флаг подразумевает в том числе и включение автовекторизации.

Декларация pragma loop vectorize

Поместив следующую декларацию #pragma непосредственно перед циклом for , вы покажете компилятору, что цикл не содержит зависимостей данных, которые могут препятствовать автовекторизации:

#pragma clang loop vectorize(assume_safety)

Важное примечание. Используйте эту декларацию #pragma только тогда, когда это действительно безопасно, чтобы случайно не прийти в состояние гонки.

Итак, если мы добавим ее в пример выше:

#pragma clang loop vectorize(assume_safety) for (int y = 0; y < image_height; ++y) < for (int x = 0; x < image_width; ++x) < // остальная часть кода совпадает с предыдущим примером >>

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru