Какими командами можно максимально разогреть процессор, как задействовать максимальное кол-во конвейров процессора, какими командами, напишите примерный код.
А попробовать? Логично предположить что надо задействовать макс. кол-во блоков. Доку в зубы+эксперементы и вперед. Логично, что нужно нагрузить оба алу, векторный блок, умножения и store\load(тока чтоб они не тормозили ожидая память). А еще можно найти бюрнер и дизасмить =)
fdiv. Еще попробуй в Калькуляторе (calc.exe) число 1.111 возводить в 3 степень мнократно (пока одно возведение не будет занимать 1 минуту) - отличное нагревание.
Насчет разогрева не в курсе, конвеер там один, можно задействовать максимальное кол-во исполнительных блоков, но для PIII больше 3-х мопов за такт не получится! (для других скорее тоже есть ограничение на пропускную способность конвеера) Если код под винду, например так: первый вариант задействует только 5 устройств за 2 такта, второй 6 (3 мопа\такт), вообще интересный вопрос Код (Text): ;============================================== repeat 1000 push eax ; p0\3\4 pop eax ; p1\2 end repeat ;============================================== mov ecx,-1000 align 16 @@: mov eax,[esp+ecx*4] ; p2 mov eax,[esp+ecx*4] ; p2 mov [esp+ecx*4],eax ; p3\4 inc ecx ; p0 jnz @B ; p1 ;==============================================
Нужно выполнять имхо тяжелые векторные комманды, типа умножение/деление/возведение в степень и т.д. Обращения к память можно практически исключить (хотя кеш-память занимает большую часть кристалла, она едва-ли имеет высокий TDP).
alpet Ну незнаю, незнаю ... Допустим взять деление в цикле или тяжелые CPUID, RDTSC. Мне кажется конвеер закинул один "тяжелый" моп в алу и простаивает пока он х.з. сколько тактов там выполнится (и декодер будет простаивать пока предыдущие мопы не отработают), чтобы закинуть следующий (такой же), а можно же нагрузить все устройства и чтоб мопы летали каждый такт через RAT, ROB, retirement station, MOB ...
bogrus Надо эксплуатировать элементы потребляюшие наибольший ток. Простые комманды выполняются слишком быстро, чтобы вызвать серьезный разогрев ИУ (на исполняющие устройства, насколько я понимаю приходится наибольшая токовая нагрузка). Поэтому основной вариант - скармливать по 1000-2000 тяжелых инструкций ALU,FPU,MMX последовательно (не смешивая разнотипные).
alpet Согласен, можно взять посложнее (сдвиг, скан бита) или с тем же делением (пока оно выполняется) совместить инструкции использующие другие блоки, хуже ведь не будет, хотя тут уже прийдется учитывать специфику каждого камня ...
bogrus В принципе можно - но имхо пару в бане не добавит. Другое дело что тяжелые векторные инструкции параллелятся лишь частично с простыми, а некоторые и вовсе не желают. Насколько мне известно прогреватель S&M использует в основном комманды типа FDIV.
alpet "S&M использует в основном комманды типа FDIV." ага как же он всем говорит по-разному один раз мне Fmul, знакомому сказал ALU-шные команды и т. д.
locki Помоему тебе не хватает банального эксперимента. Зачем гадать, когда можно потестировать все команды?
вообще-то, основную площадь кристалла занимает L2 кэш, и интенсивная работа с ним (постоянное вытеснение/ загрузка линеек) дает ощутимый результат. у меня на P-III и Атлоне 1050 тепература подпрыгивает как ненормальная, правда P-4 еще не проверял
Да - L2 кэш очень даже нагревает - потому я и написал юзать store\load, но таким образом, чтоб до памяти не дошло.
Блин, на практике: imul разогревают до 64 гр. MMX разогревают до 62 гр. FPU fdiv разогревают до 60 гр. S&M разогревают до 70 гр. после чего я принудительно останавливал ее. Как ну как? достичь таких результатов?!?
гг - надо все одновременно делать - все блоки нагревать, а не отдельно imul\fdiv... как это грамотно делать умные люди думали уже двано - S&M неплохо бы пройтись vtune и дизасемблировать критические куски. А может и простейшее смешивание поможет...