Форум программистов, компьютерный форум, киберфорум
ОС на Assembler
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.69/29: Рейтинг темы: голосов - 29, средняя оценка - 4.69
8 / 8 / 5
Регистрация: 28.03.2014
Сообщений: 137

Способы переключения видео режимов на современных видеокартах в защищенном режиме

24.08.2015, 09:57. Показов 6351. Ответов 51
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Давайте обсуждать способы переключения видео режимов на современных видеокартах в защищенном режиме.

Кто может, выкладывайте маны или код.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
24.08.2015, 09:57
Ответы с готовыми решениями:

Артефакты переключения режимов...
Добрый день.. помогите пожалуйста исправить код...не получается нормально переключать режимы и выбирать цвета..

Память в защищенном режиме
Всем доброго дня! Я, наконец, сдал основные экзамены и теперь снова могу заняться столь интересным для меня делом!)) Я многое забыл и...

Прерывания в защищенном режиме
Помогите пожалуйста разобраться с прерываниями в защищенном режиме.Какие обращения к памяти есть. Какие ошибки могут быть, есть ли...

51
1127 / 261 / 9
Регистрация: 11.06.2010
Сообщений: 1,049
06.09.2015, 16:55
Студворк — интернет-сервис помощи студентам
shmkv, ну а что может быть быстрее rep movsd ?
0
1378 / 522 / 72
Регистрация: 21.07.2015
Сообщений: 1,308
06.09.2015, 16:56
Цитата Сообщение от sh2ezo Посмотреть сообщение
Да и тесты на современных внешних видео покпзывают
А ты попробуй на современной встроенной интеловской графике запустить.
0
1127 / 261 / 9
Регистрация: 11.06.2010
Сообщений: 1,049
06.09.2015, 16:57
shmkv, bpp=24 ни на что не влияет, кроме способа подсчета размера копируемой области
0
1378 / 522 / 72
Регистрация: 21.07.2015
Сообщений: 1,308
06.09.2015, 16:58
Цитата Сообщение от sh2ezo Посмотреть сообщение
ну а что может быть быстрее rep movsd ?
Я чтобы не быть голословным сейчас протестирую сам разные варинаты.

Добавлено через 1 минуту
Цитата Сообщение от sh2ezo Посмотреть сообщение
bpp=24 ни на что не влияет, кроме способа подсчета размера копируемой области
эмм. а как мне с помощью movsd скопировать фрейм с bpp=24 в vram с bpp = 32?
0
1127 / 261 / 9
Регистрация: 11.06.2010
Сообщений: 1,049
06.09.2015, 17:06
Буферизованные кадры и lfb должны быть с одним значением bpp. Конечно, можно на ходу конвертировать, но конвертацию надо делать внутри обычной памяти. Копирование из буфера на экран надо производить непрерывно.
0
1378 / 522 / 72
Регистрация: 21.07.2015
Сообщений: 1,308
06.09.2015, 17:10
Цитата Сообщение от sh2ezo Посмотреть сообщение
Конечно, можно на ходу конвертировать, но конвертацию надо делать внутри обычной памяти
Не вижу смысла в этом дополнительном действии, от него будет отрицательный выигрыш в производительности.

Добавлено через 59 секунд
Цитата Сообщение от sh2ezo Посмотреть сообщение
Буферизованные кадры и lfb должны быть с одним значением bpp.
Согласен, но вот разработчики приложений для вышеупомянутой колибри думают иначе.
0
1127 / 261 / 9
Регистрация: 11.06.2010
Сообщений: 1,049
06.09.2015, 17:18
shmkv, ну я внутренности колибри не изучал. Думал, там глобальный внутренний конвейер есть, который уже оптимизирует отрисовку
0
1378 / 522 / 72
Регистрация: 21.07.2015
Сообщений: 1,308
06.09.2015, 18:00
Итак:
C++
1
2
3
4
5
6
7
8
9
DWORD time = GetTimer();
for(i = 0; i < 10; i++)
{
    asm volatile("pushf\n"
        "cld\n"
        "rep movsd\n"
        "popf\n"::"S"(image), "D"(VideoBuffer), "c"(800*600));
}
printf("time = %d\n",  GetTimer() - time);
time = 28

Добавлено через 2 минуты
C++
1
2
3
4
5
6
7
8
9
10
11
DWORD time = GetTimer();
for(i = 0; i < 10; i++)
{
    asm volatile(
                ".test_dimove32:\n"
                "sub $4, %%ECX\n" 
                "movq (%%ESI,%%ECX), %%EAX\n"
                "movq %%EAX, (%%EDI,%%ECX)\n"
                "jnz .test_dimove32\n"::"S"(image), "D"(VideoBuffer), "c"(800*600*4));
}
printf("time = %d\n",  GetTimer() - time);
time = 27

Добавлено через 1 минуту
C++
1
2
3
4
5
6
7
8
9
10
11
12
DWORD time = GetTimer();
for(i = 0; i < 10; i++)
{
    asm volatile(
                ".test_dimove32:\n"
                "sub $8, %%ECX\n" 
                "movq (%%ESI,%%ECX), %%MM0\n"
                "movq %%MM0, (%%EDI,%%ECX)\n"
                "jnz .test_dimove32\n"::"S"(image), "D"(VideoBuffer), "c"(800*600*4));
}
asm volatile("emms");
printf("time = %d\n",  GetTimer() - time);
time = 14

Добавлено через 2 минуты
На чем тестировалось:
ЦП: Intel Atom 1.6ghz
VGA: Intel i945

Добавлено через 52 секунды
ЦП в PM32, дискретность таймера 1/145с.
0
1127 / 261 / 9
Регистрация: 11.06.2010
Сообщений: 1,049
06.09.2015, 18:03
shmkv, тут проблема в том, что для амд, например, у меня копирование по 8 байт через MMX в видеопамять занимало времени больше, чем копирование через rep movsd. Ну это я про голое железо говорю вперемешку с многозадачностью по таймеру.
0
1378 / 522 / 72
Регистрация: 21.07.2015
Сообщений: 1,308
06.09.2015, 18:59
Тут есть один момент: все адреса для MMX должны быть выровнены, если это не так, то скорость проседает до обычного копирования.

Добавлено через 2 минуты
Цитата Сообщение от sh2ezo Посмотреть сообщение
м глобальный внутренний конвейер есть, который уже оптимизирует отрисовку
Нихрена там нет. Именно по этому им не имеет особого смысла делать драйвера для GPU: его функционал все равно будет несовместим с их кривеньким gui.

Добавлено через 3 минуты
Цитата Сообщение от sh2ezo Посмотреть сообщение
Ну это я про голое железо говорю вперемешку с многозадачностью по таймеру.
У меня примерно тоже самое, только на тестах в системе ровно 1 поток для чистоты эксперимента.

Добавлено через 14 минут
Цитата Сообщение от sh2ezo Посмотреть сообщение
тут проблема в том, что для амд, например, у меня копирование по 8 байт через MMX в видеопамять занимало времени больше
Тут дело не в процессоре, а скорее всего в том, что видеокарта внешняя. А запись через MMX в MMIO вообще непонятно как процессором реализуется. Скорее всего разбивается на две mov команды.
0
Эксперт С++
4986 / 3093 / 456
Регистрация: 10.11.2010
Сообщений: 11,170
Записей в блоге: 10
11.09.2015, 13:09
Цитата Сообщение от sh2ezo Посмотреть сообщение
shmkv, ну а что может быть быстрее rep movsd ?
Развёрнутый цикл будет быстрее.
0
Эксперт быдлокодинга
 Аватар для Полный 30h
2095 / 529 / 70
Регистрация: 04.11.2010
Сообщений: 1,314
14.09.2015, 15:44
Цитата Сообщение от sh2ezo Посмотреть сообщение
ну а что может быть быстрее rep movsd
Цитата Сообщение от castaway Посмотреть сообщение
Развёрнутый цикл
movsq
0
1378 / 522 / 72
Регистрация: 21.07.2015
Сообщений: 1,308
05.10.2015, 12:01
Цитата Сообщение от Полный 30h Посмотреть сообщение
movsq
На х86-64 только. И то, что цепочечные команды movs быстрее, чем самому считать смещения - миф.
Для встроенных карточек можно просто включить кэширование в MTRR и после записи фрейма юзать WBINVD -- скорость повысится в разы. Для внешней карты способ сомнителен (надо тестировать), не исключаю всевозможные артефакты и даже зависание системы.
0
Эксперт быдлокодинга
 Аватар для Полный 30h
2095 / 529 / 70
Регистрация: 04.11.2010
Сообщений: 1,314
05.10.2015, 13:09
shmkv, могу конечно ошибаться, но как мне кажется что при цепочных командах самым узким местом будет шина по которой идут данные.
0
1378 / 522 / 72
Регистрация: 21.07.2015
Сообщений: 1,308
05.10.2015, 15:50
Полный 30h, мнение, что цепочные команды только тем и занимаются, что память копируют - ошибочное. В интеловских манах можно найти описание работы данной инструкции, по факту процессор интерпретирует movs как набор инструкций, причем не самый оптимальный (для целей скопировать байты с адреса A в B). Т.е. это своеобразный синтаксический сахар ассемблера x86.
0
Эксперт быдлокодинга
 Аватар для Полный 30h
2095 / 529 / 70
Регистрация: 04.11.2010
Сообщений: 1,314
05.10.2015, 20:55
Цитата Сообщение от shmkv Посмотреть сообщение
В интеловских манах можно найти описание работы данной инструкции, по факту процессор интерпретирует movs как набор инструкций, причем не самый оптимальный
Интел прямо так и пишет - эту инструкцию мы слепили из чёрти чего и хрен пойми как?
Надо же, ну хоть не скрывают.
0
Эксперт С++
4986 / 3093 / 456
Регистрация: 10.11.2010
Сообщений: 11,170
Записей в блоге: 10
05.10.2015, 21:03
Цитата Сообщение от Полный 30h Посмотреть сообщение
Интел прямо так и пишет - эту инструкцию мы слепили из чёрти чего и хрен пойми как?
На самом деле так и есть, интересовался такими подробностями лет ~8-10 назад.
Инструкция rep* - это обычный цикл, у которого могут быть минусы, например: невыровненные данные, проверка условия завершения на каждой итерации.
0
Эксперт быдлокодинга
 Аватар для Полный 30h
2095 / 529 / 70
Регистрация: 04.11.2010
Сообщений: 1,314
06.10.2015, 00:21
Цитата Сообщение от castaway Посмотреть сообщение
Инструкция rep* - это обычный цикл,
1. Непонятно откуда в обсуждении взялся rep
2. rep это не обычный цикл. Достаточно написать три строчки кода

Assembler
1
2
3
4
  rep movsd
@@:  
  movsd
  loop @r
скомпилировать программу и посмотреть хоть в IDA хоть в OllyDbg
0
Эксперт С++
4986 / 3093 / 456
Регистрация: 10.11.2010
Сообщений: 11,170
Записей в блоге: 10
06.10.2015, 00:34
Цитата Сообщение от Полный 30h Посмотреть сообщение
1. Непонятно откуда в обсуждении взялся rep
В 32-м сообщении вы что имели в виду? Одну инструкцию movsq?

Цитата Сообщение от Полный 30h Посмотреть сообщение
2. rep это не обычный цикл...
А какой это цикл?
0
Эксперт быдлокодинга
 Аватар для Полный 30h
2095 / 529 / 70
Регистрация: 04.11.2010
Сообщений: 1,314
06.10.2015, 08:45
Цитата Сообщение от castaway Посмотреть сообщение
В 32-м сообщении вы что имели в виду? Одну инструкцию movsq
В 32 сообщении имелось ввиду что movsq быстрее чем movsd. Относительно контекста "современной оси" Потому что в контексте данного разговора movsd это половина ресурсов от возможности системы. Ну примерно как если в windows с dos пересесть, а данные продолжать командой mowsd слать
Цитата Сообщение от castaway Посмотреть сообщение
А какой это цикл?
Однокомандный . И если бы он выполнялся как loop, то какой смысл его было в отдельную команду выделять?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
06.10.2015, 08:45

Принципы адресации в защищенном режиме
Здраствуйте, давно когда начинал заниматься ассемблером не разобрался с одним вопросом ... начал заниматься программированием в другой...

Удаленный доступ в защищенном режиме
Обычный удаленный доступ: Ввожу IP, пользователя и пароль, а затем подключаюсь. Мне не нравится, что безопасность зависит от каких-то двух...

Не обрабатываются прерывания в защищенном режиме
Здравствуйте! Помогите, пожалуйста, найти и исправить ошибку. Программа должна переводить процессор в защищенный режим и обрабатывать...

Работа с файлами в защищенном режиме
Здравствуйте, я взялся писать ОС, уже готов загрузчик переводящий в защищенный режим процессор, IDT GDT разумеется тоже. Хотелось бы...

Размер программы в защищенном режиме
и снова возникли проблемы. Дело в том,что при достижении определенного размера программы,она перестает работать,а порою работает с...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Генератор паролей (вариант №3)
Maks 30.10.2026
Финальная версия генератора паролей 1С. Доработка решения в этот раз коснулась только визуальной части, а именно, добавлен реквизит ДопПараметры (тип Булево), который скрывает/ отображает реквизиты:. . .
Магическое мышление и магия, современная наука не отличима от магии (говорит ИИ Джемени)
zorxor 30.10.2026
Джемени, расскажи, пожалуйста, что такое магическое мышление, что такое магия, почему современная наука чем-то напоминает магию? Фраза «Любая достаточно развитая технология неотличима от магии». . .
За какое время ИИ может подобрать пароль по хешу (рассказывает Джемени ИИ)
zorxor 30.10.2026
Расскажи, Джемени, если известен хэш МД5, например, за сколько ИИ сможет подобрать соответствующий пароль? Искусственный интеллект (ИИ) может подобрать простой или средний по сложности пароль по. . .
Кто убил Suno? Почему наше солнышко погасло? (диалог с ИИ Джемени)
zorxor 30.10.2026
Как убивали Suno. Хронология. «Убийство» музыкальной нейросети Suno — это затяжной процесс, в котором технологический хайп стартапа разбился о жесткую реальность судебных исков от гигантов. . .
Генератор паролей (вариант №2)
Maks 30.10.2026
Обновленная версия ранее созданной обработки. Добавлены следующие реквизиты типа Булево: - Буквы; - Цифры; - Символы. Изменена логика команды "Сгенерировать" и процедуры "ПриОткрытии":. . .
Генератор паролей (вариант №1)
Maks 29.10.2026
Реализация из решения ниже выполнена исключительно по моей инициативе, дабы облегчить себе работу в создании паролей для администрируемых мною сервисов и пользователей. Самым главным критерием для. . .
Установка ChatGPT (Codex) на Windows без использования Microsoft Store
Fabien159 28.10.2026
Здравствуйте всем читающим! Опишу процесс установки ChatGPT (Codex) на Windows, если по каким-то причинам у вас не получается устанавить его через Microsoft Store. И так: 1. Скачиваем с. . .
Программное добавление префикса в нумерацию документов
Maks 27.10.2026
Реализация из решения ниже выполнена в самописной конфигурации на БСП (помощь начинающему коллеге). Задача: Программно добавить префикс в нумерацию документов. Решение: В модуле объекта. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru