оптимизация
Найдено: 9 записей
Песочница →
Увеличиваем скорость вычислений в Matlab
Добрый день, уважаемые хабровчане!
Предлагаю вашему вниманию статью, на которую меня натолкнул недавний пост Matlab кластер своими руками. В свое время я столкнулся с теми же проблемами что и автор топика, однако для увеличения производительности я не стал уходить в дебри распределенных вычислений, а просто решил максимально оптимизировать свой код. Как это сделать в Matlab, прошу под кат за подробностями.
Статья является описанием жизненного опыта и вольным переводом англоязычной публикации.
Предлагаю вашему вниманию статью, на которую меня натолкнул недавний пост Matlab кластер своими руками. В свое время я столкнулся с теми же проблемами что и автор топика, однако для увеличения производительности я не стал уходить в дебри распределенных вычислений, а просто решил максимально оптимизировать свой код. Как это сделать в Matlab, прошу под кат за подробностями.
Статья является описанием жизненного опыта и вольным переводом англоязычной публикации.
02.10.2011 18:39+0400
Javascript →
Оптимизация JavaScript: Scope, Low level ES vs ES5 Array methods
Сегодня мы будем тестировать 2 блока кода, выполняющие следующую операцию:
Дается массив, необходимо выбрать все элементы, степень 2 которых больше 5.
В синем углу Вариант А: Низкоуровневый код — старый и страшный (поддающийся частичной оптимизации)
В красном углу Вариант Б: Высокоуровневый код — молодой и красивый (не поддающийся частичной оптимизации)
Битвы будут происходить на 3 аренах.
1. AO args — Параметры объекта активации функции.
2. AO — Локальные переменные объекта активации функции.
3. Global — Глобальные переменные.
Дается массив, необходимо выбрать все элементы, степень 2 которых больше 5.
В синем углу Вариант А: Низкоуровневый код — старый и страшный (поддающийся частичной оптимизации)
- for (i = 0, res = []; i < c; i++) {
- t = a[i];
- if (t >= 2.236067) {
- continue;
- } else {
- res.push(t * t);
- }
- }
В красном углу Вариант Б: Высокоуровневый код — молодой и красивый (не поддающийся частичной оптимизации)
- a.map(function (t) { return t * t}).filter(function (t) { return t > 5});
Битвы будут происходить на 3 аренах.
1. AO args — Параметры объекта активации функции.
2. AO — Локальные переменные объекта активации функции.
3. Global — Глобальные переменные.
21.12.2010 01:50+0300
Ни о чём →
Тест Си компиляторов под Windows
После многочисленных споров на тему «Какой компилятор лучше генерирует код», появилась идея провести самому испытания. Основной целью испытания была проверка скорости работы программы с оптимизацией по скорости. Результат тестирования: среднее арифметическое время выполнения тестовой функции в миллисекундах (1/1000 сек). т.е. чем меньше тем лучше.
В тестировании участвовали:
MS Windows XP SP3 Eng x32 на ноутбуке и на компьютере (с одного диска устанавливались и один и тот же SP3 ставился).
Варианты компиляции:
Intel C++ Compiler Pro 11.1.054
Итоги:
По результатам тестирования на оптимизацию по скорости, компиляторы занимают следующие места:
В тоже время С++ Builder показал себя не с лучшей стороны (отставание в 2 раза), что свидетельствует о чуть другой специфики его применения.
Ну а про Tiny C Compiler 0.9.25 и речи не может быть, потому что он вообще не поддерживает оптимизацию переходов, вот и выходит, что скорость выполнения программы находится на уровне с другими компиляторами без оптимизации при компиляции.
Конечно С++ Builder оказался чуть староват потому что не нашел я у себя более свежей версии. Хотя мне кажется, там мало что изменилось в этом плане.
Заключение
По результатам тестирования нельзя судить о компиляторе, что он хорош или плох, потому что каждому своё применение, а можно лишь говорить о том, какой их них подойдет для создания программных продуктов связанных с вычислительными операциями.
В тестировании участвовали:
- Intel C++ Compiler Pro 11.1.054;
- GCC 4.5.0 (MinGW);
- MS C/C++ Compiler 15.00.21022.08 (VS 2008);
- CodeGear C++ Builder 11.0 (C++Builder 2007);
- Tiny C Compiler 0.9.25.
- Компьютер: CPU Intel E5200 (2-ядерный) 2.5 Ггц + 2 Гб ОЗУ;
- Ноутбук: CPU AMD Athlon QL-62 (2-ядерный) 2 Ггц + 3 Гб ОЗУ.
MS Windows XP SP3 Eng x32 на ноутбуке и на компьютере (с одного диска устанавливались и один и тот же SP3 ставился).
Варианты компиляции:
- Отключена любая оптимизация;
- Включена вся возможная оптимизация.
- Исходный код тестовой программы не изменяется в зависимости от компилятора;
- Тестовая функция не использует функции системы, т.е. только вычислительные операции, все функции связанные с вызовом системных функций вызываются до и после замера времени;
- Не используются библиотеки распараллеливания типа OpenMP;
- Вычисления производятся только в одном потоке;
- Компьютер не загружен больше никакими другими программами, только запущенная Windows + Notepad + тестовая программа;
- Для тестов не использовалась VCL, MFC, CLR, ATL;
- Код программ компилировался именно как С код, а не С++;
- Для Tiny C Compiler использовался только 1 вариант компиляции, потому что он не поддерживает оптимизацию на уровне кода. Из документации:
Оптимизация кода ограничена вычислением константных выражений на этапе компиляции, заменой операций умножения и деления операциями сдвига где это возможно, а также некоторыми другими действиями. Оптимизация переходов не производится, так как это потребовало бы организацию промежуточного кода в более абстрактном виде.
- Выделение памяти для буферов;
- Получение UserTime текущего потока через GetThreadTimes;
- Выполнение тестовой функции;
- Получение UserTime текущего потока через GetThreadTimes;
- Получение разницы во времени с точностью до миллисекунд (1/1000 сек);
- Повторение последних 4-х действий 10 раз;
- Вычисление среднего арифметического значения времени.
- Инициализация ключевой последовательности для алгоритма шифрования RC4;
- Инициализация ключевой последовательности для алгоритма шифрования AES-128;
- Заполнение первого тестового буфера данными полученными из генератора RC4;
- Вычисление CRC32 для первого тестового буфера;
- Шифрование первого тестового буфера алгоритмом AES-128, блоками по 128 бит, с помещением результата во второй тестовый буфер;
- Заполнение первого тестового буфера данными полученными из генератора RC4, т.е. первоначальные данные затираются полностью;
- Расшифровка второго тестового буфера с помещением результата в первый тестовый буфер;
- Подсчет CRC32 для расшифрованного первого тестового буфера;
- Сравнение CRC до шифрование и после.
- Кол-во данных для шифрования — 1600 килобайт (102400 блоков);
- Кол-во тестовых итераций для вычисления среднего арифметического значения времени — 10.
Intel C++ Compiler Pro 11.1.054
- Ноутбук без оптимизации: 6301 мс;
- Ноутбук с оптимизацией: 971 мс;
- Компьютер без оптимизации: 4541 мс;
- Компьютер с оптимизацией: 867 мс.
- Ноутбук без оптимизации: 6568 мс;
- Ноутбук с оптимизацией: 1691 мс;
- Компьютер без оптимизации: 4979 мс;
- Компьютер с оптимизацией: 1521 мс.
- Ноутбук без оптимизации: 5149 мс;
- Ноутбук с оптимизацией: 1574 мс;
- Компьютер без оптимизации: 3740 мс;
- Компьютер с оптимизацией: 1290 мс.
- Ноутбук без оптимизации: 4982 мс;
- Ноутбук с оптимизацией: 3854 мс;
- Компьютер без оптимизации: 4006 мс;
- Компьютер с оптимизацией: 3185 мс.
- Ноутбук: 6275 мс;
- Компьютер: 4606 мс.
Итоги:
По результатам тестирования на оптимизацию по скорости, компиляторы занимают следующие места:
- Intel C++ Compiler Pro 11.1.054;
- MS C/C++ Compiler 15.00.21022.08 (VS 2008);
- GCC 4.5.0 (MinGW);
- CodeGear C++ Builder 11.0 (C++Builder 2007);
- Tiny C Compiler 0.9.25.
В тоже время С++ Builder показал себя не с лучшей стороны (отставание в 2 раза), что свидетельствует о чуть другой специфики его применения.
Ну а про Tiny C Compiler 0.9.25 и речи не может быть, потому что он вообще не поддерживает оптимизацию переходов, вот и выходит, что скорость выполнения программы находится на уровне с другими компиляторами без оптимизации при компиляции.
Конечно С++ Builder оказался чуть староват потому что не нашел я у себя более свежей версии. Хотя мне кажется, там мало что изменилось в этом плане.
Заключение
По результатам тестирования нельзя судить о компиляторе, что он хорош или плох, потому что каждому своё применение, а можно лишь говорить о том, какой их них подойдет для создания программных продуктов связанных с вычислительными операциями.
07.11.2010 14:18+0300
humour →
Переоптимизация
Сайт моего провайдера:
Но им не быть в топе по запросу «интернет». Это кармическое наказание за то,
что пользователи не могут зайти в личный кабинет при отрицательном балансе.
Но им не быть в топе по запросу «интернет». Это кармическое наказание за то,
что пользователи не могут зайти в личный кабинет при отрицательном балансе.
10.03.2010 15:45+0300
humour →
Основы SEO оптимизации
Два урока SEO оптимизации от маленького гуру своего дела:)
P.S спасибо перенес в юмор.
P.P.S это не я!
P.S спасибо перенес в юмор.
P.P.S это не я!
15.02.2010 18:17+0300
Головоломки →
Задача по двумерной упаковке от Dropbox
Компания Dropbox опубликовала головоломки для потенциальных кандидатов на работу. Свои решения для тестовых задач просьба высылать на jobs@dropbox.com. Как сказано на сайте, с авторами этих писем «нам есть о чём поговорить».
Первая задача — алгоритм двумерной упаковки объектов. Нужно разместить прямоугольники заданной длины и высоты на минимальной площади. На входе перечень объектов с указанием длины и ширины (целые числа), на выходе функция должна выдавать площадь минимального прямоугольника, куда они помещаются. Объекты можно поворачивать на 90°. Дополнительные бонусные очки выдаются за визуализацию средствами stderr.
Первая задача — алгоритм двумерной упаковки объектов. Нужно разместить прямоугольники заданной длины и высоты на минимальной площади. На входе перечень объектов с указанием длины и ширины (целые числа), на выходе функция должна выдавать площадь минимального прямоугольника, куда они помещаются. Объекты можно поворачивать на 90°. Дополнительные бонусные очки выдаются за визуализацию средствами stderr.
15.12.2009 14:39+0300
humour →
Оптимизация пользовательских интерфейсов
Навеяно многолетним общением с клиентами и восстановлением сайтов после их деструктивной деятельности.
01.10.2008 15:42+0400
humour →
Переоптимизация
Сайт моего провайдера:
Но им не быть в топе по запросу «интернет». Это кармическое наказание за то,
что пользователи не могут зайти в личный кабинет при отрицательном балансе.
Но им не быть в топе по запросу «интернет». Это кармическое наказание за то,
что пользователи не могут зайти в личный кабинет при отрицательном балансе.
30.11.1999 00:00+0300
humour →
Основы SEO оптимизации
Два урока SEO оптимизации от маленького гуру своего дела:)
P.S спасибо перенес в юмор.
P.P.S это не я!
P.S спасибо перенес в юмор.
P.P.S это не я!
30.11.1999 00:00+0300