Pull to refresh

Comments 62

Скорее всего TSC(тот что вы читаете при помощи RDTSC) тикает в разных ядрах по разному. При старте биоса стартует всегда одно ядро(нулевое) и уже потом специальный код стартует остальные ядра, потому на разных ядрах может оказаться разное значение TSC. Винда кидает процессы между ядрами. Когда вы выставляете Affinity. Кстати TSC ещё и переполняться может за долгое время работы, ничего в этом страшного нет. Мы даже писали в него с драйвера, всё прекрасно работает. Вообще от использования TSC надо уходить. На многоядерных машинах с плавающей частотой, да ещё и асинхронно, когда одни ядра разгоняются быстрее чем другие вообще чёрт в этом TSC сломит.
Исправление: Когда вы выставляете Affinity программа привязана к одному ядру, и глюки пропадают.
Аффиниит — это маска. Можно привязывать к набору ядер. По умолчанию, естесственно, привязки нет.
Винда действительно кидает программу между ядрами, даже если поток всего один. Глюк заключается в Cool'n'Quiet — первое ядро простаивает, второе работает, первое получает инструкцию, которую надо выполнить, второе получает за ним, но второе выполняет инструкцию раньше, чем первое, потому что первое простаивает.
Вывод однин. TSC это точно но очень опасно, лучше не использовать.
UFO just landed and posted this here
Я тоже раньше так думал, и сам имею только интел на всех компьютерах, но знакомым иногда рекомендую AMD тупо по соотношению цена/производительность. А всем топовые решения навязывать просто бессмысленно.
Просто фигею от подобных заявлений.
Вы хоть поняли о чем пост?????

Ладно объясню: человек не читает msdn, потом долго ищет баг и в результате делает неправильные выводы.
UFO just landed and posted this here
Да, а процессоры Интел в проблемах не были замечены…
У каждого процессоров есть официальная простыня багов, что у Intel, что у AMD.
Ну так да, я об этом же. А то нацепят маски фанатиков…
Вывод один. процессоры это очень опасно, лучше не использовать.
У меня смутное ощущение что АМД выпускала дрова для своих процов, которые решали указанные глюки.
Но могу ошибаться.
Просто у меня никогда не было Интел процессоров, и эти глюки видел очень ограниченный промежуток времени
Ну там же по-человечески выше написали, что проблема не в камне, а в bios-овом Cool'n'Quiet.
Та же проблема есть и в Linux при использовании clocksource TSC ядром. При смене на hpet проблема решается. :) На Intel ее нет (собственно и tsc там почему-то не выбирается по-дефолту). А диагностика та же — многократный запуск команды date из шелла может показывать разное время, которое отличается на 2-3 секунды. Отрицательные пинги и т.д.

попробовать hpet можно вот так:
echo hpet > /sys/devices/system/clocksource/clocksource0/current_clocksource
На самом деле на интелах тоже бывает. Просто почему-то в программах вообще не проявляется. Если с драйвера напрямую ассемблером регистр читать то тоже разное. Даже если писать туда ноль постоянно никому крышу не рвёт.
Счетчик тактов уходит из-за технологий энергосбережения с понижением частоты. У Интела одно время были проблемы с TSC на SMP, но потом (начиная с P4 0xF30) они придумали «constant tsc» (гуглите, www.tomshardware.co.uk/forum/128629-10-intel ). Эта фича говорит о том, что rstsc будет выдавать монотонный и синхронный счетчик на любых ядрах вне зависимости от текущих технологий энергосбережения, от текущей частоты.
нашел на их сайте линк — Cool ‘n’ Quiet

а вот как, отключить или проверить правильно ли работает не нашел… обидно
В биосе enable/disable в чем сложность? Или биос это уже слишком для современного посетителя Хабра?
Эээ, ну так просто драйвер поставить и все.
CnQ отключать глупость. Запрет на использования больше одно ядра, тоже.
Ну и да, кстати минусовые пинги тоже свидетельство.
Как уже говорилось, даже просмотрев классику, можно заметить некоторые детали, которые раньше были не видны.

From Habr
Тачка Дока на AMD работала :)
Теперь понятно, почему такая веселуха с перемещениями была)
Надо же, я не знал, что в серьёзных программах для измерения времени используется служебный регистр, не предназначенный для измерения времени.
А у меня двухядерник от Интел и в KOTOR 1 тоже были «скачки времени». Может не только у АМД такой глюк?
Попробуйте Set Affinity на одно, любое ядро, должно помочь если причина именно в этом.
в GTA San Andreas при включенных двух ядрах атлона игра значительно ускорена, так что порой невозможно играть
поэтому после включения приходится сворачивать и отключать второй процессор в диспетчере задач
Баг очень старый. Можно поставить оптимайзер от AMD, а еще лучше просто поставить Service Pack 3 на Windows XP
т.е. автору достаточно было обновить венду? :)
Никак нет, у меня SP3 стоит уже год как.
амд как обычно отжог. занимались бы лучше видяхами, хоть что-то получаться стало
Страшнейший баян про отрицательный ping на системах с amd)))
Так а что с ним делать?!
Драйвер поставить и винду обновить, выше писалось.
Вот инвалиды, блин, сделали бы общий регистр на все ядра. Это же самый удобный по моему способ мерять время. без оверхедов и системных вызовов, будь они неладны.
Такое решение не универсально. На одном многоядерном камне сработает, а вот если много отдельных камней? Тут один регистр на всех не сделать. Тут нужно какое-то другое решение. Думаю, это должна ось рулить.
В чипсет пусть встраивают. И вообще, многоядерность — зло.
Извиняюсь, случайно. Так вот:

SetTime(0,0,0,0); {засекаем время, т.е. устанавливаем системное время равным 0 ч 0 мин 0.00 сек }
For i:=1 to NumDist do
begin
d:=dist[i];
For CurGroup:=1 to d do
InsertSort(d,CurGroup);
end;
GetTime(hour,minute,second,hund); {Получаем время сортировки}
via govnokod.ru/1122
просто у вас компьютер стоит вертикально, ядра находятся на разной высоте от земли, время для верхнего течет медленнее, вот разница накапливается и однажды проявляется ошибка. Положите компьютер горизонтально.
Шутка, если что ;)
Да, надо было копирайт поставить…
Точно. Поэтому в Mac Pro процы горизонтально расположены :)
Забыли сказать, что это все только «In Windows Server 2000, Windows Server 2003, and Windows XP»
Офигеть… Ну стоило бы таки прочитать мануал к процессору, ей богу :) Столько гемора и времени…
Кстати на новые двух-трех-четырехядерные процессоры драйвер уже не нужен.
Прочитал статью, автору респект! А вот инженерам AMD низачет, как-то на голову не налазит, что они пропустили такой баг. ИМХО.
Это не баг. Прото они не гарантируют, что на разных ядрах выполняется одинаковое количество инструкций. Так что amd ни при чём, а дело в системе: использование любой фичи не по назначению всегда чревато.
слоупок. эту багу лет 200 назад пофиксили и выпустили новый драйвер…
Может не в тему, но на моей тачке со включенным Cool&Quiet USB-audio временами издавал достающие клики, особенно при нагрузне на графику. Подозреваю, что причиной является то же самое.
Развели тут флуду, амд у вас во всём виновата…
Проблеме на самом деле сто лет в обед, и решаетя 1000+ способом.
Но на самом деле процессоры АМД здесь не при чём, проблема в материнской плате.
BiSeTrojanov, какой бы ты себе не вставил многоядерный процессор в свою материнскую плату, она не сможет запустить ядра синхронно, проблема в мамке, решается вполне софтово.
Детальное описание проблемы, и программка которая проверяет систему.
www.ice-graphics.com/ICEAffinity/IndexR.html
Причина — сугубо в криворукости программистов. Им в голову не прийти, что бывают много процессорные системы. Там кроме этого ещё вагон багов есть — например, задача может поочерёдно исполняться на разный ядрах, что при эксклюзивном кэше даёт сильную потерю в производительности.
И нечего тут на AMD валить — криворуким программистам, чего не дай — все затормозят и испоганят.
/usepmtimer НЕЛЬЗЯ убирать.
Вы же сами через одно место прочитали KB 895980

«you must force the AMD computer to use the PM timer by using the /usepmtimer switch.»
пришлось убирать из секции «Boot Loader» (но НЕ из «Operating Systems»)
Вам не понятно «но не»?
пардон, в таком ключе — понятно :)
Извиняюсь за предыдущий коммент, тогда это косяки установщика от AMD.
Просто в Boot Loader вообще ключи не пишут… вот я и ошибся x)
Sign up to leave a comment.

Articles