| Эмуляция > Эмуляторы консолей 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 ---Так как портянку не возможно понять не поехав мозгами. --- Конец цитаты --- об этом и речь. вопросы были более риторическими, визуально по коду и так понятно (если есть хоть базовые навыки программирования). |
| Навигация |
| Главная страница сообщений |
| Следующая страница |
| Предыдущая страница |