Паравозек™     хостинг в сети Internet
   ru54.com
Web::IRC     irc.ru54.com

Окно IRC
[10:11] * ChanServ меняет режим: +qo Nikodim Nikodim
[12:22] * Nikodim покинул IRC (Client exited)
[12:52] * Nikodim приходит в #nostalgy
[12:52] <Вася> Превед медвед
[12:52] * ChanServ меняет режим: +qo Nikodim Nikodim
[12:53] <Uzix> Nikodim: не лучше. 2 средних удобнее
[12:53] <Uzix> у меня дома один 27", а на работе - два 24"
[12:53] <Вася> Uzix : говно
[12:54] <Uzix> один большой хорош для игр и фильмов, для какой-то деятельности лучше два
[12:56] <Nikodim> Uzix : ну так на большом мониторе ты также с успехом можешь расположить несколько окон приложений каскадом
[12:56] <Nikodim> я, собственно, так и поступаю
[12:58] <Uzix> Nikodim: чтобы это было удобно - нужен тайловый менеджер.
[12:58] <Nikodim> Uzix : "тайловый менеджер"?
[12:58] <Uzix> Nikodim: кроме того, игры открываются во весь экран (или на бОльшую его часть)
[12:59] <Uzix> Nikodim: "тайловый оконный менеджер". без него ты обречён вечно возюкать мышкой, пытаясь растащить окна по монитору так, чтобы они не перекрывали друг друга
[13:03] <Nikodim> Uzix : аа
[13:35] <STIW> ~Nikodim, У НАС НА РАБОТЕ тоже у всех по два монитора - так удобней.
[13:36] <STIW> ~Nikodim, у брОтана ваще два здоровых 16х9 моника, перевёрнутых на 90°
[13:44] <Nikodim> STIW : у меня на работе 1 моник
[15:16] <STIW> ~Nikodim, у тебя, видимо, специфика работы другая. Я, до перехода ВОТ СЮДА, тоже ни разу не юзал 2 моника. А ТУТ, оказалось, это очень даже надо.
[15:18] <Nikodim> STIW : я как-то раз думал про два монитора дома, но потом отказался и купил один аж на 20"!
[15:18] <Nikodim> щас доволен им
[15:18] <Nikodim> японский "NEC"
[15:24] <[anp-hsw]> ребята, есть тут программисты? :)
[15:25] <[anp-hsw]> я короче, исправляю баги в memtest86+, и их осталось всего два
[15:25] <[anp-hsw]> https://github.com/anphsw/memtest86/issues/1
[15:25] <[anp-hsw]> короче, нужен дос-программист хороший, где его взять?:)
[15:26] <[anp-hsw]> при выводе в ком-порт в многопроцессорном режиме символ дублируется ровно столько раз, сколько процессоров имеется в системе
[15:41] <Nikodim> [anp-hsw] : видимо почему-то (?) один и тот же участок кода исполняется ровно столько раз, сколько имеется процессоров
[15:41] <Вася> Nikodim : говно
[15:41] <[anp-hsw]> в том-то и дело, что немного нет.
[15:42] <[anp-hsw]> например строка "abcd", выплюнутая в ком-порт, дает "aaaabbbbccccdddd"
[15:42] <[anp-hsw]> а если бы исполнялось действительно много раз, то было бы "abcdabcdabcdabcd"
[15:43] <[anp-hsw]> т.е. виноват outb(), а как поправить - хз
[15:43] <[anp-hsw]> в однопроцессорном режиме все ок
[15:43] <Nikodim> хм, интересно...
[15:44] <Nikodim> [anp-hsw] : в порт ввода-вывода пишется 1 байт за одну машинную инструкцию?
[15:44] <[anp-hsw]> да
[15:45] <[anp-hsw]> и гарантировано "abcd" пишется последовательно побайтово
[15:45] <Nikodim> [anp-hsw] : а разве не может быть так, что машинный код программы выполняется распараллелированием?
[15:45] <[anp-hsw]> https://github.com/anphsw/memtest86/blob/master/lib.c#L858
[15:46] <[anp-hsw]> вот тут
[15:46] <[anp-hsw]> так он не должен. вызов происходит только на одном CPU (любом из кучи)
[15:47] <[anp-hsw]> к тому же, в этой же функции мы ждем, что буфер опустошен (WAIT_FOR_XMITR)
[15:47] <[anp-hsw]> если бы было параллельно, то часть символов бы перемешалась, т.к. буффер занят другим процессом, и они бы встали в очередь
[15:48] <Nikodim> [anp-hsw] : я тебе про это и говорю. Я тебе намекаю на то, что распараллелирование кода происходит неверно. Грубо говоря, выполнилась ассемблерная команда "out DX, AL" (где в DX - номер порта, в AL - 1-байтное значение для записи в порт) на процессоре CPU1 в цикле, и в этот моментна CPU2 она выполнилась ещё раз - получилась строка "aa"
[15:49] <Nikodim> [anp-hsw] : я к тому, что если попробовать выполнить эту программу на другом многопроцессорном компе?
[15:50] <[anp-hsw]> я пробовал - на всех так. притом я не могу выделить конкретный CPU под отправку в com-порт, иначе бы этой проблемы не было
[15:50] <Nikodim> хм...
[15:50] <[anp-hsw]> но 100% outb выполняется только один раз, я в его обертку счетчик ставил
[15:53] <Nikodim> [anp-hsw] : режим многопоточности (http://en.wikipedia.org/wiki/Multithreading_(computer_architecture)) у тебя не запущен? В Java, к примеру, я могу легко заставить выполнить один блок кода на разных ядрах ЦП одновременно, и если надо, то нужна синхронизация процесса
[15:53] <Вася> Nikodim : блядь
[15:55] <Nikodim> [anp-hsw] : вот пример из SVN у меня: http://user:userru54.com:83/svn/projects/Java/MultiThreading/
[15:55] <Nikodim> http://user:user@ru54.com:83/svn/projects/Java/MultiThreading/
[15:55] <[anp-hsw]> это же memtest86, нету там понятия потоков
[15:55] <Nikodim> там в реальном режиме процессор работает?
[15:55] <[anp-hsw]> там просто выбирается CPU, ему задается блок памяти для копирования, выбирается следующий, итд
[15:56] <[anp-hsw]> нет, не в реальном
[15:56] <[anp-hsw]> притом пшринудительное исполнение на каком-то одном CPU проблему не решает никак
[15:57] <[anp-hsw]> точнее, начинают пропадать символы, которые печатаются другими CPU
[15:57] <Nikodim> хм...
[15:57] <[anp-hsw]> я даже хз, я в такие дебри раньше не лазил
[15:59] <Nikodim> [anp-hsw] : тогда, скорей всего, дело в цикле while (*p) {} в программе
[16:00] <[anp-hsw]> я уже напрямую через outb писал - тоже самое
[16:00] <[anp-hsw]> и пробовал через outb_p - аналогично
[16:00] <[anp-hsw]> ну а цикл просто читает строку, пока не закончится
[16:01] <Nikodim> [anp-hsw] : то есть если убрать цикл while и просто написать outb_p, и из этой одной команды только и будет состоять функция serial_echo_print(), то результат будет аналогичным?
[16:02] <[anp-hsw]> да
[16:04] <Nikodim> [anp-hsw] : допустим, в функции serial_echo_print() имеется всего один оператор, который лишь пишет в порт значение "a", и происходит выход из функции. Тогда на 4 процессорах при выполнении этой команды будет записано в порт "aaaa"?
[16:06] <[anp-hsw]> именно
[16:06] <[anp-hsw]> этоп и пытаюсь обьяснить
[16:06] <[anp-hsw]> только в случае, если 4 процессора активны
[16:06] <[anp-hsw]> если их выключить - запишется только один вимвол
[16:06] <Вася> [anp-hsw] : говнюк
[16:07] <Nikodim> [anp-hsw] : если активен 1 процессор, то запишется "a"; если включить 2 процессора - запишется "aa"; если включить 4 процессора - запишется "aaaa"?
[16:07] <[anp-hsw]> да
[16:07] <[anp-hsw]> сколько активных, столько и запишется
[16:08] <[anp-hsw]> хотя исполняется всего одна комманда ассемблера out xxxx
[16:08] <[anp-hsw]> видимо режим работы неправильный, или я чего-то не понимаю
[16:09] <Nikodim> [anp-hsw] : хм, ну тогда отсюда можно сделать вывод, что либо выполнение кода на самих процессорах происходит неверно, либо же где-то в программе (может быть, даже в другом модуле программы, который вызывается) каким-то образом иницируется выполнение кода на разных потоках процессора или процессоров
[16:09] <Nikodim> другого объяснения я не вижу
[16:10] <Nikodim> [anp-hsw] : посмотри, где вызывается serial_echo_print(), и есть ли какие-то предварительные настройки режима работы процессора
[16:10] <Nikodim> в коде
[16:10] <[anp-hsw]> нету
[16:10] <[anp-hsw]> там просто outb и все
[16:10] <Nikodim> [anp-hsw] : тогда остаётся только 1-ый вариант, а именно: неверная работа процессоров
[16:10] <Nikodim> если рассуждать логически
[16:11] <[anp-hsw]> я даже близко не могу понять, где именно
[16:11] <[anp-hsw]> куча кода, хрен пойми, что и как
[16:11] <[anp-hsw]> а я ну совсем не на этом уровне пишу обычно
[16:11] <Nikodim> [anp-hsw] : а ты тестировал программу на одних и тех же видах процессоров?
[16:11] <Nikodim> или же на разных?
[16:12] <Nikodim> материнки разные были по моделям и прошивкам?
[16:12] <Nikodim> и прочее
[16:15] <[anp-hsw]> даже в виртуалке qemu :)
[16:15] <Вася> [anp-hsw] : пизда
[16:32] <Nikodim> [anp-hsw] : и в виртуалке такая же фигня?
[16:33] <[anp-hsw]> даэ
[18:22] * Nikodim покинул IRC (Normal Exit)
[19:25] <Uzix> [anp-hsw]: поставь бряк на твоём outb и посмотри на PC всех ядер
Количество строк: 
Кодировка: Windows-1251

mIRC®
mIRC®
mIRC® - один из лучших и популярных IRC-клиентов в мире! Он потребляет в разы меньше трафика, чем, например, ICQ®.
О том, как его скачать и настроить под наш IRC-сервер, смотрите здесь.
Toffee
Toffee
Toffee - IRC-клиент под DOS®.
Чтобы скачать, нажмите здесь.
irssi
irssi
irssi - IRC-клиент под Linux.
Чтобы скачать, нажмите здесь.

© Объединение "Паравозек™"
ru54.com
nspu@list.ru
Имя IRC-канала технической поддержки: #nostalgy
ICQ: