Для Q3 в принципе хватало оптимизированной реализации OpenGL на CPU c использованием SSE (идеи изложены здесь, сам движок писали у нас в Нижнем Новгороде, разумная производительность на Q3 была одним из показателей).
Согласен, с ними и сейчас боль при запуске на современной винде (хотя обычно какие то решения находятся). Но я до игр того времени только недавно дошёл (сейчас, скажем, первый Thief прохожу), в те годы комп был староват, а апгрейдить только ради игрушек не хотелось.
Дома линейкой 9x практически не пользовался (на старом компе 95 стояла, но он был для неё явно слабоват, чаще грузился в DOS), а вот на работе, когда во времена NT4/2k нужно было что-то поотлаживать именно под 98 или Me (прикладной софт, не драйвера), висли/перегружались они явно чаще NT.
Я ставил Win2k на новый домашний комп примерно в 2003ем, тогда стояло 128Mb и это было скорее нормально, чем много. Простояла лет десять, пока сам комп не сдох (хотя в последние годы он в основном работал телевизором, по умолчанию грузилась слакварь с tvtime на полный экран без wm/de).
"Если вы не можете выполнить эти работы на Фортране, выполните их на ассемблере. Если же их нельзя выполнить на ассемблере, их не стоит делать вообще."
В системе же ещё кеши с метаинформацией лежат (fc-cache обновляет, fontconfig пользуется), т.е. по к шрифту относится несколько файлов и неконсистентное состояние во время апдейта возможно.
произошло с введением групп процессоров в Windows Server 2008 R2 и Windows 7
Спасибо, будем считать что так (официальную информацию от Microsoft сходу не нахожу) и в ваших тестах привязка потоков к процессорам на одном или разных ядрах корректна. Но, опять же, закладываться на конкретный порядок в промышленном коде точно нельзя.
Да, я понимаю что передаются маски, вопрос в выставленных битах.
первые два бита - это два логические ядра одного физического, следующие два - это следующий проц и так далее.
Похоже сейчас на Windows это так (и здесь явно отражена такая нумерация), но на Линуксе и в старых версиях Windows по другому. Скажем, в этом документе от Microsoft пишут
Intel's recommendation is to list the first logical processor on each of the physical HT processors before listing any of the second logical processors.
и про свою нумерацию ничего не вижу. Когда оно поменялось - сходу не подскажу, но в любом случае в серьёзном коде в случаях, когда отображение номеров процессоров на физические ядра существенно, надо явно получать топологию от ОС (как писал выше, в Линуксе топология выставлена через sysfs, в Windows можно получить через GetLogicalProcessorInformation) и не закладывать какую то конкретную нумерацию. И в Линукс, и в Windows порядок может быть другим на процессорах от других производитетелей и/или c другими архитектурами.
Кстати, значения affinity меня смущают. Система же при нумеровании логических CPU на интеловских процессорах сначала проходит по всем физическим ядрам, выбирая по одному логическому процессору, а потом делает второй проход - т.е. на i7-10850H с 6 физическими ядрами процессора 0..5 находятся на разных ядрах, 6 живёт на одном ядре с 0, 7 с 1 и т.д. Бенчмарк это учитывает?
PS Хотя то, что написал выше, справедливо на Линуксе (там это легко посмотреть через /sys/devices/system/cpu/cpu<номер>/topology/thread_siblings_list), а вот на Windows 11 на ноуте простенький тест с GetLogicalProcessorInformation говорит, что логические процессоры на одном ядре идут подряд - хотя во времена Pentium 4 точно было не так.
Для Q3 в принципе хватало оптимизированной реализации OpenGL на CPU c использованием SSE (идеи изложены здесь, сам движок писали у нас в Нижнем Новгороде, разумная производительность на Q3 была одним из показателей).
А в винде сейчас реально используется UTF-16 (не считая отображения в GUI)? В именах файлов символы за пределами BMP сравниваются без учёта регистра?
Согласен, с ними и сейчас боль при запуске на современной винде (хотя обычно какие то решения находятся). Но я до игр того времени только недавно дошёл (сейчас, скажем, первый Thief прохожу), в те годы комп был староват, а апгрейдить только ради игрушек не хотелось.
Мне 2000 для игр вполне хватало (навскидку из известного проходил Half Life 2, GTA Vice City и San Andreas, Thief 3, Call of Cthulhu).
В 2000 у меня было 8Mb оперативки и про Win2k вообще не думал ;)
Дома линейкой 9x практически не пользовался (на старом компе 95 стояла, но он был для неё явно слабоват, чаще грузился в DOS), а вот на работе, когда во времена NT4/2k нужно было что-то поотлаживать именно под 98 или Me (прикладной софт, не драйвера), висли/перегружались они явно чаще NT.
Я ставил Win2k на новый домашний комп примерно в 2003ем, тогда стояло 128Mb и это было скорее нормально, чем много. Простояла лет десять, пока сам комп не сдох (хотя в последние годы он в основном работал телевизором, по умолчанию грузилась слакварь с tvtime на полный экран без wm/de).
Дошли до перестановки кроватей...
Мне такой калькулятор подарили после второго класса в 1984ом, через несколько месяцев написал первую программу (банальное вычисление факториала).
Вроде как РЖД до сих пор не смогла полностью импортозаместить IBM z, так что специалисты нужны.
"Если вы не можете выполнить эти работы на Фортране, выполните их на ассемблере. Если же их нельзя выполнить на ассемблере, их не стоит делать вообще."
А как "под капотом" реализовано использование SIMD? С Pandas/Numpy понятно - вендоры сами пишут оптимизированные реализации.
Скорее всё есть бит (если не учитывать эксперименты с троичной арифметикой), архитектур с размером слова не кратным 8 хватало.
Это сейчас точно так (учитывая борьбу с уязвимостями и KPTI)?
В системе же ещё кеши с метаинформацией лежат (fc-cache обновляет, fontconfig пользуется), т.е. по к шрифту относится несколько файлов и неконсистентное состояние во время апдейта возможно.
Да, бывает, что сходить в DRAM через локальный контроллер быстрее, чем в кеш на другом NUMA узле (вот здесь у ребят на седьмом слайде такая ситуация).
Спасибо, будем считать что так (официальную информацию от Microsoft сходу не нахожу) и в ваших тестах привязка потоков к процессорам на одном или разных ядрах корректна. Но, опять же, закладываться на конкретный порядок в промышленном коде точно нельзя.
Да, я понимаю что передаются маски, вопрос в выставленных битах.
Похоже сейчас на Windows это так (и здесь явно отражена такая нумерация), но на Линуксе и в старых версиях Windows по другому. Скажем, в этом документе от Microsoft пишут
и про свою нумерацию ничего не вижу. Когда оно поменялось - сходу не подскажу, но в любом случае в серьёзном коде в случаях, когда отображение номеров процессоров на физические ядра существенно, надо явно получать топологию от ОС (как писал выше, в Линуксе топология выставлена через sysfs, в Windows можно получить через GetLogicalProcessorInformation) и не закладывать какую то конкретную нумерацию. И в Линукс, и в Windows порядок может быть другим на процессорах от других производитетелей и/или c другими архитектурами.
Кстати, значения affinity меня смущают. Система же при нумеровании логических CPU на интеловских процессорах сначала проходит по всем физическим ядрам, выбирая по одному логическому процессору, а потом делает второй проход - т.е. на i7-10850H с 6 физическими ядрами процессора 0..5 находятся на разных ядрах, 6 живёт на одном ядре с 0, 7 с 1 и т.д. Бенчмарк это учитывает?
PS Хотя то, что написал выше, справедливо на Линуксе (там это легко посмотреть через /sys/devices/system/cpu/cpu<номер>/topology/thread_siblings_list), а вот на Windows 11 на ноуте простенький тест с GetLogicalProcessorInformation говорит, что логические процессоры на одном ядре идут подряд - хотя во времена Pentium 4 точно было не так.
Ну так
https://www.intel.com/content/www/us/en/developer/articles/release-notes/vtune-profiler/current.html
По работе сталкиваюсь )