FAQ
Stepan Ilyin aka Step
Xakep, номер #060, стр. 060-104-2
Q: Недавно занялся программированием. Начал с малого – Pascal/Delphi. Меня интересует понятие «рекурсия». Объясни, пожалуйста, что это такое, зачем нужно и насколько оправдано ее применение. Ни в одной из имеющихся у меня книжек я ответа этот вопрос не нашел.
А: Рекурсия - это прием программирования, при котором подпрограмма (как правило, функция) в ходе выполнения составляющих ее операторов обращается сама к себе. Казалось бы – бред! А нет – благодаря рекурсии иногда можно просто и компактно написать то, что не рекуррентным способом написать очень сложно. Чаще всего этот прием используется для вычисления членов каких-либо последовательностей, их сравнения, сортировки. Самый элементарный пример – функция для подсчета факториала числа (n!):
var n:integer;
function f(x:integer):longint;
begin
if x = 1 then f := 1 else f := x * f(x-1);
end;
begin
writeln('Введите N ');read(n);
writeln('N!=',f(n));
readln;
end.
Этим же способом можно легко определить любой член последовательности, зная лишь один из ее элементов, а также зависимость идущих подряд членов. Более того, с помощью рекурсии пишутся наиболее быстрые алгоритмы сортировки элементов последовательностей и массивов, столь часто используемые в любой программе. Однако есть у этого приема один очень неприятный недостаток: любая недоработка программы может привести к огромному количеству глюков и вылетов. Прежде всего, из-за переполнения стека. Именно поэтому он и не пользуется большой популярностью среди программистов и вообще считается моветоном в программировании. Однако взять на вооружение рекурсию все-таки стоит: когда-нибудь наверняка пригодится. Да и в чужом коде наткнуться на такую конструкцию раз плюнуть: без опыта разобраться с ней будет довольно сложно.
Q: Расскажи please про новую AMD`шную технологию Cool’n’Quiet. Говорят, действительно стоящая вещь!
A: AMD уже довольно давно уделяет немалое внимание и инвестирует огромные средства в разработку механизмов, понижающих уровень тепловыделения выпускаемых процессоров. Технология Cool’n’Quiet, присущая пока только AMD Athlon 64 3200+, несомненно, огромный прорыв в этой области. Что же она собой представляет? Это программно контролируемая система для уменьшения тактовой частоты и напряжения питания в зависимости от нагрузки CPU. Напомню, что еще старые Athlon XP имели в своем арсенале функцию перехода в ждущий режим. Она казалась весьма перспективной в теории, однако на практике явно не справлялась с возложенными на нее задачами. Схема работы Cool’n’Quiet куда сложнее, но и эффективнее. В моменты, когда от процессора требуется максимальная отдача, например, во время игры в современные гамесы, кодирования/декодирования видео, работы с 3D-графикой, частота процессора выставляется до номинала. Но во время простоя компьютера или незначительной нагрузки на процессор (просмотр видео, работа в офисных приложениях и т.д.) специальный драйвер (к слову, работающий только на операционных системах, поддерживающих ACPI 2.0) уменьшает множитель процессора, напряжение питания и, соответственно, его частоту. Таким образом, существуют три режима работы CPU: минимальный (800 МГц, 1,3 В), нормальный (1800 МГц, 1,4 В) и максимальный (2000 МГц, 1,5 В). Думаю, нет смысла объяснять, что во время работы CPU в двух первых режимах уровень тепловыделение резко снижается! Меньше перегревов – меньше глюков! А если ты еще и счастливый обладатель вентилятора с переменной скоростью вращения, то технология Сool’n’Quiet и вовсе превратит твою работу за компьютером в сказку: уровень шума заметно уменьшится. Правда, стоит отметить, что с применением технологии Сool’n’Quiet пока не все так гладко. Даже самая последняя версия процессорного драйвера (который, кстати, можно скачать с www.amd.com/us-en/Processors/TechnicalResources/0,,30_182_871_9706,00.html) не умеет возвращать номинальную частоту процессора в случаях резкого достижения максимальной загрузки CPU. Будем надеяться, что эту оплошность программисты AMD в самом скором будущем исправят.