Эмуляция > Эмуляторы консолей 6 поколения и выше
rpcs3 - Эмулятор PS3
<< < (119/355) > >>
Йобан Матич:



Вся необходимая информация находится под спойлером ниже: Единственный развивающийся на сегодня эмулятор - rpcs3:

* Скачать последние ревизии: rpcs3 - AppVeyor
* Git исходники: GitHub - RPCS3/rpcs3: PS3 emulator/debugger
* Официальный FAQ (Англ): GitHub - RPCS3/rpcs3 Wiki
* Распространяемый пакет vcredist 2015: ссылка (Для решения проблемы запуска, связанной с нехваткой библиотек)
* Список совместимости
* Прошивка PS3: https://www.playstation.com/en-us/support/hardware/ps3/system-software/Системные требования: ПК с процессором x86, поддерживающим инструкцию SSSE3; Операционная система x64: linux/osx/win; Продвинутая видеокарта с поддержкой OpenGL 4.3.
s1nka:

--- Цитата: hotter от 04 Декабрь 2017, 16:10:11 ---Все таки наверное когда будут процы по 10-20Ггц,тогда и будут заветные 30-60фпс 
--- Конец цитаты ---
Когда-то про PS2 такое писали. Только про 6-9Ггц.
Sophie Lhant:

--- Цитата: s1nka от 04 Декабрь 2017, 16:13:57 ---Когда-то про PS2 такое писали. Только про 6-9Ггц.

--- Конец цитаты ---
Ну если ядра в сумме считать - всё правильно.
Йобан Матич:

--- Цитата: Dyons от 04 Декабрь 2017, 15:04:42 ---на pcsx2 тоже самое
--- Конец цитаты ---
pcsx2 достаточно кориво эмулирует  GoW.


--- Цитата: Sophie Lhant от 04 Декабрь 2017, 17:23:09 ---Ну если ядра в сумме считать - всё правильно.
--- Конец цитаты ---
Тут ещё стоит учитывать, что кукурузные гигагерцы тех пентиумов и гигагерцы core i7 несколько разыне вещи. Хотя pcsx2 всё равно умудряется тормозить.
Softer:

--- Цитата: Йобан Матич от 04 Декабрь 2017, 17:59:46 ---pcsx2 достаточно кориво эмулирует  GoW.

--- Конец цитаты ---
ну да, настолько криво, что все ждут его именно на rpcs3  :lol:
Молочные кексики:
Так помимо частоты/ядер, есть же ещё контроллер памяти в процах. Этот кеш можно засрать какой-нибудь игрой, высером сатаны и памятью в 1333 мгц и... всё.
И даже 50 гигагерц не помогут.
Да мало ли там что через 5 лет будет, очередная оптимизация инструкций, улучшение имеющихся наборов и новые, гораздо быстрее.
Skay:

--- Цитата: Молочные кексики от 04 Декабрь 2017, 20:15:52 ---Да мало ли там что через 5 лет будет, очередная оптимизация инструкций, улучшение имеющихся наборов и новые, гораздо быстрее.
--- Конец цитаты ---
и конечно же костыли из 8086  :lol:
gepar:
А с pcsx2 тоже такое было когда в некоторые игры можно было поиграть на фулспиде в 4к на слабом процессоре (catherine на i3), а в другие - 5 фпс на топ железе (дрейк на i7)? Кто-то помнит?
Softer:

--- Цитата: gepar от 04 Декабрь 2017, 23:41:00 ---А с pcsx2 тоже такое было когда в некоторые игры можно было поиграть на фулспиде в 4к на слабом процессоре (catherine на i3), а в другие - 5 фпс на топ железе (дрейк на i7)? Кто-то помнит?

--- Конец цитаты ---
Не просто было, а до сих пор есть: "24 - The Game", "Primal" ...
nonamezerox:

--- Цитата: Skay от 04 Декабрь 2017, 20:25:39 ---и конечно же костыли из 8086  :lol:
--- Конец цитаты ---

Костыли из 8086 существуют исключительно снаружи процессора. Внутри там давно уже высокоэффективная RISC-подобная архитектура и все эти легаси-костыли - просто кусок микрокода, никак не влияющий на эффективность микроархитектуры. Собственно, поэтому этот самый богомерзкий х86 и выжил с рынка практически все конкурирующие RISC-архитектуры.
Wind:
nonamezerox,  и что же ты там богомерзкого нашел в x86?
Softer:

--- Цитата: nonamezerox от 05 Декабрь 2017, 09:31:29 ---Внутри там давно уже высокоэффективная RISC-подобная архитектура
--- Конец цитаты ---
Весьма спорное утверждение. Собственно какую-нибудь RISC инструкцию на x86 процессоре назови?
UPD: Уточню, пока над RISC архитектурой есть CISC микрокод и обратиться к RISC напрямую, через RISC команду, без необходимости преобразования CISC команд в RISC нет возможности - вся эта конструкция является CISC, пусть и суперскалярная. Во всяком случае я это вижу именно так.
UPD2: Касательно же "костылей" х86 я в целом с тобой согласен. Их наличие никак и ни чему не мешает, так как все CISC команды являются частью микрокода и отдельных аппартных блоков под себя не требуют.


--- Цитата: nonamezerox от 05 Декабрь 2017, 09:31:29 ---Собственно, поэтому этот самый богомерзкий х86 и выжил с рынка практически все конкурирующие RISC-архитектуры.
--- Конец цитаты ---
Особенно ARM  :lol:, ведь всем известно, что все эти ваши телефоны, планшеты, роутеры и ещё куча техники не являющейся Windows-совместимой - это конечно x86  :lol:.
stalker4:
Точность эмуляции растет, скорость падает. Тот же демон соулс стал медленнее работать. Началось.....
Молочные кексики:

--- Цитата: stalker4 от 07 Декабрь 2017, 11:23:23 ---Точность эмуляции растет, скорость падает. Тот же демон соулс стал медленнее работать. Началось.....

--- Конец цитаты ---
Не ной, тебе же сказали ждать 5 лет, вот и жди.
Новых AMD и Intel c 20 ядрами и 40 потоками, с кешем в 1 гигабайт.
Всё также как и было с Pcsx2.
stalker4:
Да нет, дело не в мощностях. Они что-то починили, а что -то поломали. Как всегда надо около месяца ждать, пока они доведут до ума все нововведения

Добавлено позже:

--- Цитата: Молочные кексики от 07 Декабрь 2017, 12:23:16 ---AMD и Intel c 20 ядрами и 40 потоками, с кешем в 1 гигабайт.
--- Конец цитаты ---
Пять лет? Я тя уверяю, через 5 лет мы все еще будем иметь 8-ядерники
ZEROx:
Игры стали медленней работать на новых версиях за счет нового ZCull на вулкане, очень сильно режет фпс во многих играх, порой даже в тех в которых без него обойтись можно
MetalliC:
я смотрю тут собрание экспертов по высокоэффективному кодингу сегодня  :lol:

вот вам для примера пара процедурок, делающих одно и то же:
раз

--- Код: ---double *input, *output;
for (int i = 0; i < 32; i++) {
double s = 0;
for (int j = 0; j < 32; j++)
s += input[j] * m_cos_cache[i][j];
output[i] = s;
}

--- Конец кода ---

двас

--- Код: ---float *src, *dst;
double v53, v58, v59, v60, v74, v78, v79, v80, v81;
double v82, v83, v129, v142, v143, v144, v145, v146;
double v147, v148, v149, v150, v151, v152, v153, v154;
double v155, v200, v201, v202, v203, v204, v205, v206;
double t0, t1, t2, t3, t4, t5, t6, t7;

t0 = src[0] + src[31];
v142 = src[0] - src[31];
t1 = src[1] + src[30];
v152 = src[1] - src[30];
v74  = src[2] + src[29];
v200 = src[2] - src[29];
v146 = src[3] + src[28];
v144 = src[3] - src[28];
v81  = src[4] + src[27];
v150 = src[4] - src[27];
v79  = src[5] + src[26];
v154 = src[5] - src[26];
v201 = src[6] + src[25];
v129 = src[6] - src[25];
v82  = src[7] + src[24];
v148 = src[7] - src[24];
v53  = src[8] + src[23];
v153 = src[8] - src[23];
v60  = src[9] + src[22];
v151 = src[9] - src[22];
v202 = src[10] + src[21];
v203 = src[10] - src[21];
v204 = src[11] + src[20];
v145 = src[11] - src[20];
v205 = src[12] + src[19];
v149 = src[12] - src[19];
v58  = src[13] + src[18];
v155 = src[13] - src[18];
t2   = src[17] + src[14];
v143 = src[14] - src[17];
t3   = src[16] + src[15];
v147 = src[15] - src[16];

v83  = t0 + t3;
v80  = t0 - t3;
v59  = t1 + t2;
v78  = t1 - t2;
t0   = v74 + v58;
v74  = v74 - v58;
t1   = v146 + v205;
v146 = v146 - v205;
t2   = v81 + v204;
v81  = v81 - v204;
t3   = v79 + v202;
v79  = v79 - v202;
t4   = v201 + v60;
v201 = v201 - v60;
t5   = v82 + v53;
v82  = v82 - v53;

v53  = v83 + t5;
v83  = v83 - t5;
v60  = v59 + t4;
v59  = v59 - t4;
v202 = t0 + t3;
v206 = t0 - t3;
v204 = t1 + t2;
v58  = t1 - t2;

t0   = v53 + v204;
v53  = v53 - v204;
t1   = v60 + v202;
v60  = v60 - v202;

v202 = t0 + t1;

t1   = (t0 - t1)*sincos[_sin_pi_div_4];
t2   = v53 * sincos[_cos_pi_div_8] + v60 * sincos[_sin_pi_div_8];
v53  = v53 * sincos[_sin_pi_div_8] - v60 * sincos[_cos_pi_div_8];
v60  = v83 * sincos[_cos_pi_div_16] + v58 * sincos[_sin_pi_div_16];
v83  = v83 * sincos[_sin_pi_div_16] - v58 * sincos[_cos_pi_div_16];
v58  = v206 * sincos[_sin_3pi_div_16] + v59 * sincos[_cos_3pi_div_16];
v59  = v206 * sincos[_cos_3pi_div_16] - v59 * sincos[_sin_3pi_div_16];
t3   = v60 + v58;
t4   = (v60 - v58)*sincos[_sin_pi_div_4];
v58  = v83 + v59;
t5   = (v83 - v59)*sincos[_sin_pi_div_4];
v59  = t4 + t5;
v60  = t4 - t5;
t4   = v80 * sincos[_cos_pi_div_32] + v82 * sincos[_sin_pi_div_32];
v80  = v80 * sincos[_sin_pi_div_32] - v82 * sincos[_cos_pi_div_32];
t5   = v201 * sincos[_sin_3pi_div_32] + v78 * sincos[_cos_3pi_div_32];
v78  = v201 * sincos[_cos_3pi_div_32] - v78 * sincos[_sin_3pi_div_32];
t6   = v74 * sincos[_cos_5pi_div_32] + v79 * sincos[_sin_5pi_div_32];
v74  = v74 * sincos[_sin_5pi_div_32] - v79 * sincos[_cos_5pi_div_32];
v79  = v81 * sincos[_sin_7pi_div_32] + v146 * sincos[_cos_7pi_div_32];
v146 = v81 * sincos[_cos_7pi_div_32] - v146 * sincos[_sin_7pi_div_32];
v81  = t4 + v79;
v83  = t4 - v79;
v79  = t5 + t6;
v82  = t5 - t6;
t4   = v81 + v79;
t5   = (v81 - v79)*sincos[_sin_pi_div_4];
t6   = v83 * sincos[_cos_pi_div_8] + v82 * sincos[_sin_pi_div_8];
v83  = v83 * sincos[_sin_pi_div_8] - v82 * sincos[_cos_pi_div_8];
t7   = v80 + v146;
v80  = v80 - v146;
v146 = v78 + v74;
v78  = v78 - v74;
v74  = t7 + v146;
v82  = (t7 - v146)*sincos[_sin_pi_div_4];
v146 = v80 * sincos[_cos_pi_div_8] + v78 * sincos[_sin_pi_div_8];
v80  = v80 * sincos[_sin_pi_div_8] - v78 * sincos[_cos_pi_div_8];
v78  = t6 + v80;
v79  = t6 - v80;
v80  = t5 + v82;
v81  = t5 - v82;
v82  = v83 + v146;
v83  = v83 - v146;
t5   = v142 * sincos[_cos_pi_div_64] + v147 * sincos[_sin_pi_div_64];
v142 = v142 * sincos[_sin_pi_div_64] - v147 * sincos[_cos_pi_div_64];
t6   = v143 * sincos[_sin_3pi_div_64] + v152 * sincos[_cos_3pi_div_64];
v152 = v143 * sincos[_cos_3pi_div_64] - v152 * sincos[_sin_3pi_div_64];
v143 = v200 * sincos[_cos_5pi_div_64] + v155 * sincos[_sin_5pi_div_64];
v200 = v200 * sincos[_sin_5pi_div_64] - v155 * sincos[_cos_5pi_div_64];
v155 = v149 * sincos[_sin_7pi_div_64] + v144 * sincos[_cos_7pi_div_64];
v144 = v149 * sincos[_cos_7pi_div_64] - v144 * sincos[_sin_7pi_div_64];
v149 = v150 * sincos[_cos_9pi_div_64] + v145 * sincos[_sin_9pi_div_64];
v150 = v150 * sincos[_sin_9pi_div_64] - v145 * sincos[_cos_9pi_div_64];
v145 = v203 * sincos[_sin_11pi_div_64] + v154 * sincos[_cos_11pi_div_64];
v154 = v203 * sincos[_cos_11pi_div_64] - v154 * sincos[_sin_11pi_div_64];
v203 = v129 * sincos[_cos_13pi_div_64] + v151 * sincos[_sin_13pi_div_64];
v129 = v129 * sincos[_sin_13pi_div_64] - v151 * sincos[_cos_13pi_div_64];
v151 = v153 * sincos[_sin_15pi_div_64] + v148 * sincos[_cos_15pi_div_64];
v148 = v153 * sincos[_cos_15pi_div_64] - v148 * sincos[_sin_15pi_div_64];
v153 = t5 + v151;
v146 = t5 - v151;
v151 = t6 + v203;
v147 = t6 - v203;
t5   = v143 + v145;
v143 = v143 - v145;
t6   = v155 + v149;
v155 = v155 - v149;
v149 = v153 + t6;
v153 = v153 - t6;
v145 = v151 + t5;
v151 = v151 - t5;
t5   = v149 + v145;
t6   = (v149 - v145)*sincos[_sin_pi_div_4];
v145 = v153 * sincos[_cos_pi_div_8] + v151 * sincos[_sin_pi_div_8];
v153 = v153 * sincos[_sin_pi_div_8] - v151 * sincos[_cos_pi_div_8];
v151 = v146 * sincos[_cos_pi_div_16] + v155 * sincos[_sin_pi_div_16];
v146 = v146 * sincos[_sin_pi_div_16] - v155 * sincos[_cos_pi_div_16];
v155 = v143 * sincos[_sin_3pi_div_16] + v147 * sincos[_cos_3pi_div_16];
v147 = v143 * sincos[_cos_3pi_div_16] - v147 * sincos[_sin_3pi_div_16];
v143 = v155 + v151;
t7   = (v151 - v155)*sincos[_sin_pi_div_4];
v155 = v147 + v146;
v146 = (v146 - v147)*sincos[_sin_pi_div_4];
v147 = t7 + v146;
v151 = t7 - v146;
t7   = v142 + v148;
v142 = v142 - v148;
v148 = v152 + v129;
v152 = v152 - v129;
v129 = v200 + v154;
v200 = v200 - v154;
v154 = v144 + v150;
v144 = v144 - v150;
v150 = t7 + v154;
v146 = t7 - v154;
t7   = v148 + v129;
v148 = v148 - v129;
v129 = v150 + t7;
v150 = (v150 - t7)*sincos[_sin_pi_div_4];
v154 = v146 * sincos[_cos_pi_div_8] + v148 * sincos[_sin_pi_div_8];
v146 = v146 * sincos[_sin_pi_div_8] - v148 * sincos[_cos_pi_div_8];
v148 = v142 * sincos[_cos_pi_div_16] + v144 * sincos[_sin_pi_div_16];
v142 = v142 * sincos[_sin_pi_div_16] - v144 * sincos[_cos_pi_div_16];
v144 = v200 * sincos[_sin_3pi_div_16] + v152 * sincos[_cos_3pi_div_16];
v152 = v200 * sincos[_cos_3pi_div_16] - v152 * sincos[_sin_3pi_div_16];
t7   = v148 + v144;
v148 = (v148 - v144)*sincos[_sin_pi_div_4];
v144 = v142 + v152;
v142 = (v142 - v152)*sincos[_sin_pi_div_4];
v152 = v148 + v142;
v148 = v148 - v142;
v142 = v143 + v144;
v143 = v143 - v144;
dst[3] = (float)v142;
dst[6] = (float)v78;
v144 = v145 + v146;
v145 = v145 - v146;
dst[5] = (float)v143;
dst[7] = (float)v144;
dst[10] = (float)v79;
dst[9] = (float)v145;
dst[12] = (float)v59;
v146 = v147 + v148;
v147 = v147 - v148;
dst[14] = (float)v80;
dst[11] = (float)v146;
dst[13] = (float)v147;
v148 = t6 + v150;
v149 = t6 - v150;
dst[15] = (float)v148;
dst[18] = (float)v81;
dst[17] = (float)v149;
dst[20] = (float)v60;
v150 = v151 + v152;
v151 = v151 - v152;
dst[19] = (float)v150;
dst[21] = (float)v151;
v152 = v153 + v154;
v153 = v153 - v154;
v154 = v155 + t7;
v155 = v155 - t7;
dst[0] = (float)v202;
dst[1] = (float)t5;
dst[2] = (float)t4;
dst[4] = (float)t3;
dst[8] = (float)t2;
dst[16] = (float)t1;
dst[22] = (float)v82;
dst[23] = (float)v152;
dst[24] = (float)v53;
dst[25] = (float)v153;
dst[26] = (float)v83;
dst[27] = (float)v154;
dst[28] = (float)v58;
dst[29] = (float)v155;
dst[30] = (float)v74;
dst[31] = (float)v129;

--- Конец кода ---

вопросы:
- какая из них более оптимизирована ?
- какая из них говнокод ?
- какая из них быдлокод ?
- функцию и смысл какой из них можно понять не поехав мозгами ?
- в случае возникновения проблем или ошибок какую из них возможно отладить и хоть что-то понять ?
- в случае если окажется, что базовый алгоритм в целом не верен и его нужно изменить, в каком из вариантов это реально сделать ?

ответы на эти вопросы возможно помогут вам немножко понять что такое "оптимизации", а также когда их применяют а когда нет.

PS: код не отфонарный, это одна из базовых операций декодирования аудио (и -видео вроде тоже) MPEG-ов.
Softer:

--- Цитата: MetalliC от 07 Декабрь 2017, 20:18:26 ---- какая из них более оптимизирована ?

--- Конец цитаты ---
Невозможно ответить на этот вопрос не понимая к каким конкретно данным применяется эта процедура и зачем она применяется. Проще говоря, вне контекста рассуждать о оптимизации - это решать уравнение без констант.
MetalliC:
Softer, конкретно это обратное дискретное косинусное преобразование, одна из основных и "дорогих" операций при декодировании m/j-peg-ов различных пород. конкретно те де процедурки для audio mpeg layer2, из MAME и Demul.
по первому варианту вроде вполне понятно что она делает, если что вот еще "наивная" реализация, без оптимизаций вообще, по ней имхо всё совсем очевидно.

--- Код: --- for(int i=0; i<32; i++) {
double s = 0;
for(int j=0; j<32; j++)
s += input[j] * cos(i*(2*j+1)*M_PI/64);
output[i] = s;
}

--- Конец кода ---
Softer:
MetalliC, они точно эквивалентны? Так как портянку не возможно понять не поехав мозгами.  :D
MetalliC:

--- Цитата: Softer от 07 Декабрь 2017, 22:12:01 ---они точно эквивалентны?
--- Конец цитаты ---
да, в первом случае наивная реализация с 1024 умножений на косинус в цикле, во втором случае с применением быстрого преобразования Фурье - в несколько раз меньше операций, плюс они еще разнесены чтоб хорошо ложились на суперскалярность.
выглядит наверное как быдло- или говно- код, в представлении диванных спецов, но нет, это и есть "хорошо оптимизированный код".


--- Цитата: Softer от 07 Декабрь 2017, 22:12:01 ---Так как портянку не возможно понять не поехав мозгами.
--- Конец цитаты ---
об этом и речь. вопросы были более риторическими, визуально по коду и так понятно (если есть хоть базовые навыки программирования).
Навигация
Главная страница сообщений
Следующая страница
Предыдущая страница

Перейти к полной версии