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

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

24.08.2015, 09:57. Показов 6320. Ответов 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
Ответ Создать тему
Новые блоги и статьи
Особенности gif сгенерированных в Си
russiannick 21.10.2026
Рассмотрим генерацию gif файлов, которые в Си имеют свои особенности. Gif представляет собой графический формат популярный в интернете. Посмотрим на палитру. Gif файл сгенерированный в си отличается. . .
FPS контроллер с анимированными Y-Bot и 3D-звуком miniaudio (Box3D, Recast, BehaviorTree.CPP, ozz-animation, ImGui, OpenGL и SDL3)
8Observer8 18.10.2026
Содержание блога | English Version Полное мультиплатформенное руководство по стартовому проекту с FPS-контроллером игрока, анимированными роботами Y-Bot с 4-слойным блендингом, 3D-физикой Box3D,. . .
Локальный http сервер
Argus19 17.10.2026
Локальный http сервер На работе, на двух локальных компьютерах круглосуточно работают программы опроса приборов с записью в книги Excel,которые раз в сутки записываются на сервер компании. Т. к. . . .
Копировать Windows на новый диск на UEFI
damix 17.10.2026
https:/ / uriesk. wordpress. com/ 2016/ 11/ 01/ move-window-10-to-ssd-on-a-uefi-dualboot-system-with-basic-linux-tools/ TL DR Вставляем диск, а старый подключаем через переходник, грузимся с лайва. . .
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык. Возвращает он вот это: https:/ / i. **********/ vqBWLe2. png Нужную строчку в 3й колонке просто выдумал. . Это. . .
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor. Это. . .
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru