Содержание
- 2. План Оптимизация Профилировка Измерение производительности
- 3. Литература http://vision.eng.shu.ac.uk/bala/c/c/optimisation/1/optimization.html http://www.top500.org/lists/linpack.php http://www.pallas.com/e/products/index.htm
- 4. Необходимость оптимизации Оптимизация необходима Ускорение работы программы Оптимизировать необходимо только после того, как программа отлажена !!!
- 5. Подходы к оптимизации Оптимизация исполняемого кода Использование специфических команд процессора Векторные операции Развертывание циклов Изменение порядка
- 6. Основные принципы Необходимо понимать, что делает алгоритм и как он это делает Оптимизировать необходимо Самые медленные
- 7. Устранение ненужных участков if(x != 0) x=0;
- 8. Оптимизация за счет кэширования данных Обрабатывать данные небольшими блоками К массивам данных обращаться последовательно
- 9. Обработка данных блоками Большие блоки данных могут не помещаться в кэш процессора float[10][10] float[100][100] - будет
- 10. Обращение к данным Cij=AikBkj for(i=0; i for(j=0; j for(k=0; k c[i][j]+=a[i][k]*b[k][j] Cij=AikBkj for(i=0; i for(k=0; k
- 11. Уменьшение количества вызовов функций (inline) int foo(a, b) { a = a - b; b++; a
- 12. Развертывание циклов (unroll) for (i = 0; i do_stuff(i); } for (i = 0; i do_stuff(i);
- 13. Устранение ненужных циклов (loop jump) for (i = 0; i /* initialize 2d array to 0's
- 14. Использование более быстрых операций (strength reduce) x = w % 8; y = pow(x, 2.0); z
- 15. Замена вычислений табличными операциями Вместо того, чтобы вычислять функции использовать вычисленные заранее значения
- 16. Ближе к степени двойки Не стоит создавать массивы данных и другие структуры с размерами отличающимися от
- 17. Пример упаковки /* sizeof = 64 bytes */ struct foo { float a; double b; float
- 18. Опции компилятора Каждый компилятор имеет свои опции оптимизации Gcc Icc G77 Ifc
- 19. Ввод-вывод Уменьшать время передачи Передавать данные реже и большими порциями, а не чаще и маленькими Использовать
- 20. Параллельные программы Избегать гетерогенных машин Уменьшать количество последовательных операций, особенно при передаче данных Увеличивать гранулярность задач
- 21. Профилирование Компилируется специальная информация для отслеживания времени выполнения каждой функции Специальные утилиты Опции компилятора Профилировщики Специальные
- 22. Примеры профилировщиков Gprof – для gcc Vampir Visual MPI Resources
- 23. Измерение производительности Стандартные тесты HPL high performance linpack benchmark Bonnie benchmark http://linux.maruhn.com/sec/bonnie.html Измерение производительности сети http://www.netperf.org/netperf/NetperfPage.html
- 24. HPL – используется в top5000 Решение системы линейных уравнений методом Гаусса на параллельной машине Пользователи компилируют
- 26. Скачать презентацию