Как я сделал самый быстрый ресайз изображений. часть 2, simd

Альтернативные браузеры

K-Meleon – браузер в основе которого лежит движок Firefox (Gecko) . Запустился и отлично работал на тестовой системе . Почта и поисковики работали нормально. За исключением YouTube, который предложил скачать что-то иное и современное.

Способ 1

Запуск Apex Legends и лаунчера Origin от имени администратора

Самый простой способ, но иногда он может помочь.

Кликните правой кнопкой мыши по ярлыку Apex Legends на рабочем столе;

  • Выберите «Запуск от имени администратора;
  • В ином случае лучше открыть свойства и поставить галочку на «Запускать эту программу от имени администратора» во вкладке «Совместимость»;
  • Нажмите «Применить» и запускайте игру;
  • То же самое повторите с лаунчером Origin.

Способ 2

Обновление Apex Legends и проверка целостности кэша

  • Откройте Origin. Выберите «Библиотеку» и проверьте обновление игры;
  • Если игра обновлена, то проверьте целостность кэша;
  • Нажмите правой кнопкой мыши по значку Apex Legends в библиотеке и выберите «Восстановить»;
  • Как процесс проверки закончится — запускайте игру.

Способ 3

Параметры запуска Apex Legends в Origin

  • Откройте Origin — Библиотека — Apex Legends;
  • Кликните правой кнопкой мыши и выберите «Свойства игры»;
  • Откройте вкладку «Расширенные настройки запуска»;
  • В поле «Параметры командной строки» введите «-useallavailablecores» без кавычек;
  • Нажмите «Сохранить» и запускайте игру.

Если вы нашли еще рабочие способы решить эту проблему, то пришлите их нам и мы обязательно добавим их в этот гайд.

При входе в Apex Legends пишет: CPU does not have SSSE3 (Supplemental SSE3 instructions). Как решить?

  • Отметить как новое
  • Закладка
  • Подписаться
  • Электронная почта другу

Это значит, что ваш процессор не поддерживает инструкции SSE3 → не подходит под минимальные требования

  • Отметить как новое
  • Закладка
  • Подписаться
  • Электронная почта другу

Это значит, что ваш процессор не поддерживает инструкции SSE3 → не подходит под минимальные требования

  • Отметить как новое
  • Закладка
  • Подписаться
  • Электронная почта другу

У меня такая же проблема хотя имею phenom II X4 965. Я читал что он поддерживает SSSE3

  • Отметить как новое
  • Закладка
  • Подписаться
  • Электронная почта другу
  • Отметить как новое
  • Закладка
  • Подписаться
  • Электронная почта другу
  • Отметить как новое
  • Закладка
  • Подписаться
  • Электронная почта другу

Для особо одаренных

EA отказались от поддержки феномов в Apex

  • Отметить как новое
  • Закладка
  • Подписаться
  • Электронная почта другу

мой процессор amd a6-3650 apu with radeon(tm) hd graphicsБудет ли он поддерживать данную игру?

  • Отметить как новое
  • Закладка
  • Подписаться
  • Электронная почта другу
  • Отметить как новое
  • Закладка
  • Подписаться
  • Электронная почта другу

февраля 2019 — дата последнего изменения февраля 2019 пользователем Andros_Earth

бред то что я не могу играть на старом проце, при том что я играю на нем в более производительные игры

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

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

Ответы 3

Если мы установим параметр компилятора , GCC не выдает ошибку при использовании встроенных функций AVX или SSE. Итак, GCC предполагает, что наличия флага AVX2 достаточно для запуска кода AVX и SSE. Конечно, это не гарантирует, что кто-то не создаст CPU с AVX2 и без SSE.

Комментарии (3)

В принципе, ЦП может просто поддерживать AVX2 без поддержки каких-либо инструкций SSE4 (что не так глупо, как кажется!). Однако на практике, если он поддерживает AVX2, он также поддерживает SSE4.

Комментарии (1)

Поддержка более позднего расширения Intel SIMD ISA подразумевает поддержку предыдущих расширений SIMD.

AVX2 определенно подразумевает AVX1.

Я думаю, что AVX1 подразумевает, что все функциональные биты SSE / SSE2 / SSE3 / SSSE3 / SSE4.1 / SSE4.2 также должны быть установлены в CPUID. Если не гарантировано формально, многие делает это предположение, и процессор, который его нарушает, вероятно, не будет коммерчески жизнеспособным для общего использования.

Обратите внимание, что имеет свой собственный бит функции, поэтому теоретически у вас может быть процессор с AVX2 и SSE4.2, но не с , но многие вещи рассматривают SSE4.2 как подразумевающий. Так что это больше похоже на то, что вы можете рекламировать поддержку popcnt без SSE4.2

Теоретически вы могли бы создать процессор (или виртуальную машину) с AVX, но который не принимал кодировку SSE4.2, не относящуюся к VEX, таких инструкций SSE4.2, как , но я думаю, что вы нарушите гарантии Intel относительно того, что AVX функция бит подразумевает. Не уверен, что это официально записано в руководстве, но большая часть программного обеспечения предполагает это.

Но AVX1 делает подразумевает поддержку VEX-кодирования все SSE4.2 и более ранних инструкций SIMD, например или

определенно подразумевает AVX1 и предыдущие расширения, но будет выдавать только код, использующий кодировку VEX. Тем не менее, он будет определять макрос и так далее, поэтому gcc действительно рассматривает AVX2 как подразумевающий более ранние расширения SSE и popcnt, но не FMA, AES-NI или PCLMUL. Это отдельные функции даже для GCC.

(На практике вы должны использовать или или что-то еще, чтобы включить все функции вашего процессора, и устанавливает для него параметры настройки. Не только , который оставляет настройки настройки с плохими значениями по умолчанию, такими как разделение каждой возможно невыровненной 256-битной загрузки / сохранения на 128-битные половины.)

(Обратите внимание, что в MSVC не так много макросов обнаружения SIMD ISA; он имеет один для AVX, но не для всех более ранних расширений SSE *. Модель MSVC построена на предположении, что программы будут выполнять обнаружение ЦП во время выполнения, а не компилируются для локальный компьютер

Хотя MSVC теперь имеет параметры AVX и AVX2, чтобы использовать их в качестве базовых.)

Отметим, что AVX512 как бы нарушает традиции. AVX512F подразумевает поддержку AVX2 и всего, что было до него, но помимо этого, AVX512DQ, например, не идет «до» или «после» AVX512ER. Вы можете (теоретически) иметь либо то, и другое, либо ни то, ни другое. (На практике Skylake-X / Cannonlake / и т. д. Лишь немного пересекается с Xeon Phi (Knight’s Landing / Knight’s Mill), помимо AVX512F.

Комментарии (1)

Другие вопросы по теме

Xcode simd — проблема с примером матрицы трансляции и вращенияДля чего нужны _mm256_testc_pd, _mm256_testz_pd, _mm256_testnzc_pd?Загружает ли использование SIMD регистры главного процессора?Самый быстрый способ определить, присутствует ли «ushort» в интервале <ushort> с SIMD?Добавление SSE происходит медленнее, чем оператор +Как скомпилировать eigen с инструкциями AVXКак сгенерировать simd-код для математической функции «exp» с помощью openmp?Как понять ускорение отчета по оптимизации от компилятора icc?Intrinsics: использование регистров __128Микроархитектура x86 / доля рынка SIMD

Что означает ошибка «CPU does not have POPCNT» в игре Apex Legends

Для запуска софта необходимы определённые условия и даже если по всем параметрам компоненты устройства подходили, и ранее ничего не мешало старту, при обновлении были внесены изменения, в связи с чем, попутно и предъявлены новые требования к железу, а конкретнее к процессору.

Ошибка игры Apex Legends: процессор не поддерживается

Для начала разберём, о чём именно сообщает ошибка. В первом случае, когда вместо запуска игры появляется окно с сообщением «CPU does not have SSSE 3», речь о том, что ваш процессор не поддерживает SSSE 3. Ошибка с текстом «CPU does not have POPCNT», появившаяся спустя неделю после релиза, сообщает об отсутствии поддержки процессором POPCNT, без которой игра попросту не запустится. Так, в уведомлении о каждой из ошибок сказано, что ЦП не обладает нужными параметрами для работы с Apex Legends.

Теперь нужно прояснить, что такое SSSE 3 и POPCNT в процессоре. Каждый, кто хорошо знаком с «внутренностями» системного блока знает, что характеристики CPU не ограничиваются количеством вычислительных ядер и тактовой частотой, среди параметров главного компонента аппаратного обеспечения компьютера есть и набор поддерживаемых инструкций. Эволюция в мире компьютерных технологий подразумевает и появление новых версий наборов инструкций, включаемых в современные процессоры. Новые команды называются SSSE 3 (Supplemental Streaming SIMD Extension 3). Компания Intel, внедрившая их в свои продукты, четвёртому расширению к названию добавила S вместо увеличения номера. В SSSE 3 имеется 16 уникальных команд, работающих с упакованными целыми, каждая из которых поддерживает 64-битные (ММХ) и 128-битные (ХММ) регистры. Что касается POPCNT, параметр входит в состав SSE 4.2, он же есть и в SSE4A от AMD. Есть три вариации инструкции – для 16-, 32 и 64-битных регистров.

Эти же инструкции, применяемые производителями процессоров, используют и разработчики софта, в том числе компьютерных игр, в случае с Apex Legends это SSSE 3 и POPCNT, которые в обязательном порядке должны поддерживаться вашим CPU. Если процессор не исполняет эти инструкции, равно не подходит по минимальным требованиям, значит и на запуск Apex Legends рассчитывать не стоит. Так, внесённые разработчиками Apex Legends коррективы, совершенствующие игру, отсеяли немалое количество устройств, способных её потянуть, чем и была обусловлена ошибка. При этом проблема вовсе не на стороне разработчика, всё дело в новых требованиях, которые отправили в лигу аутсайдеров все процессоры ранних поколений.

Чтобы проверить, соответствует ли ваш процессор требованиям, можно воспользоваться специализированной утилитой CPU-Z. Во вкладке «ЦП» в разделе «Набор инструкций» вы увидите все наборы, используемые ЦП. Для игры Apex Legends нужна обновлённая инструкция SSSE 3, а не устаревшая SSE 3, а также SSE 4.2, тогда как поддержка SSE 4.1 уже не подойдёт.

Updates to SSE

Later processors have added more instructions for different work to be performed on the vector registers. Supporting them with SSE support in place doesn’t require any effort on the part of the OS (except for AVX, see below). The actual user of the instructions should however check if those instructions actually exist.

CPUID bits

SSE4

Streaming SIMD Extensions 4 (SSE4)
The bit for SSE4.1 can be found on CPUID page 1, in ECX bit 19

The bit for SSE4.2 can be found on CPUID page 1, in ECX bit 20

The bit for SSE4A can be found on CPUID page 1, in ECX bit 6

SSE5

Streaming SIMD Extensions 5 (SSE5)
SSE5 was planned as one unit, but split into several:

XOP

The bit for XOP can be found on CPUID page 1, in ECX bit 11

FMA4

The bit for FMA4 can be found on CPUID page 1, in ECX bit 16

CVT16

The bit for CVT16 can be found on CPUID page 1, in ECX bit 29

AVX

The bit for AVX can be found on CPUID page 1, in ECX bit 28

XSAVE

The bit for XSAVE (needed to manage extended processor states) can be found on CPUID page 1, in ECX bit 26

AVX2

The bit for AVX2 can be found on CPUID page 7, 0, in EBX bit 5

AVX-512

The bits for AVX-512 are in CPUID page 0x0D, 0x0, EAX bits 5-7

X86_64

When the X86-64 architecture was introduced, AMD demanded a minimum level of SSE support to simplify OS code. Any system capable of long mode should support at least SSE and SSE2, which means that the kernel does not need to care about the old FPU save code.
X86-64 adds 8 SSE registers (xmm8 — xmm15) to the mix. However, you can only access these in 64 bit mode.

Advanced Vector Extensions is a SIMD (Single Instruction, Multiple Data) instruction set introduced by Intel in 2011.

AVX

AVX needs to be enabled by the kernel before being used. Forgetting to do this will raise an #UD on the first AVX call.
Both SSE and OSXSAVE must be enabled before allowing. Failing to do so will also produce an #UD.

AVX is enabled by setting bit 2 of the XCR0 register. Bit 1 of XCR0 must also be set (indicating SSE support).

Here is an example of assembly code enabling AVX after SSE has been enabled (you should check AVX and XSAVE are supported first, see above):

enable_avx
    push rax
    push rcx
    push rdx
 
    xor rcx, rcx
    xgetbv ;Load XCR0 register
    or eax, 7 ;Set AVX, SSE, X87 bits
    xsetbv ;Save back to XCR0
 
    pop rdx
    pop rcx
    pop rax
    ret

To enable AVX-512, set the OPMASK (bit 5), ZMM_Hi256 (bit 6), Hi16_ZMM (bit 7) of XCR0. You must ensure that these bits are valid first (see above).

Можно ли включить SSE2?

Многие пользователи после появления данной ошибки ищут инструкции, которые бы давали возможность включить эту «опцию» в системе, кто-то разбирается чуть более обычного и лезет в BIOS. Где-то даже встречаются упоминания о патчах, которые позволят включить ССЕ2 в компьютере, но кроме дополнительной нагрузки они не дадут эффекта. Такие моды встречаются как решение для ошибки

Вы можете использовать программку CPU-Z, для просмотра характеристик вашего процессора Если в строке Instructions не будет указан SSE2, тогда ничего не поделаешь.

Программа CPU-Z — проверка характеристик процессора

Различия между x87 FPU и SSE2

Инструкции FPU (x87) обеспечивают более высокую точность за счет вычисления промежуточных результатов с точностью 80 бит по умолчанию, чтобы минимизировать ошибка округления в численно нестабильных алгоритмах (см. и ссылки там). Однако FPU x87 является только скалярным блоком, тогда как SSE2 может обрабатывать небольшой вектор операндов параллельно.

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

Поддержка процессора

SSE2 — это расширение IA-32 архитектура, основанная на набор инструкций x86. Следовательно, только процессоры x86 могут включать SSE2. В AMD64 архитектура поддерживает IA-32 в качестве режима совместимости и включает SSE2 в свою спецификацию. Он также удваивает количество регистров XMM, обеспечивая лучшую производительность. SSE2 также требуется для установки Windows 8. (и новее) или Microsoft Office 2013 (и новее) «для повышения надежности сторонних приложений и драйверов, работающих в Windows 8».

Следующие процессоры IA-32 поддерживают SSE2:

  • Intel NetBurst на базе процессоров (Pentium 4, Xeon, Celeron, Pentium D, Celeron D )
  • Intel Pentium M и Celeron M
  • Intel Atom
  • AMD Athlon 64
  • Transmeta Efficeon
  • VIA C7

Следующие процессоры IA-32 были выпущены после разработки SSE2, но не реализовали его:

  • AMD ЦП до Athlon 64, Такие как Athlon XP
  • ЧЕРЕЗ C3
  • Трансмета Крузо
  • Intel Quark

Функции

Большинство инструкций SSE2 реализуют операции с целочисленными векторами, также присутствующие в MMX. Вместо регистров MMX они используют регистры XMM, которые шире и позволяют значительно улучшить производительность в специализированных приложениях. Еще одно преимущество замены MMX на SSE2 — это отсутствие штрафа за переключение режима для выдачи x87 инструкции присутствуют в MMX, потому что он разделяет регистровое пространство с x87 FPU. SSE2 также дополняет векторные операции с плавающей запятой набора инструкций SSE, добавляя поддержку типа данных двойной точности.

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

Реализация AMD SSE2 на AMD64 (x86-64 ) включает в себя восемь дополнительных регистров, увеличивая их общее количество до 16 (от XMM0 до XMM15). Эти дополнительные регистры видны только при работе в 64-битном режиме. Intel приняла эти дополнительные регистры как часть своей поддержки архитектуры x86-64 (или, говоря языком Intel, «Intel 64») в 2004 году.

Различия между MMX и SSE2

SSE2 расширяет инструкции MMX для работы с регистрами XMM. Следовательно, можно преобразовать весь существующий код MMX в эквивалент SSE2. Поскольку регистр SSE2 в два раза длиннее регистра MMX, может потребоваться изменить счетчики циклов и доступ к памяти, чтобы учесть это. Однако доступны 8-байтовые загрузки и сохранения в XMM, поэтому это не обязательно.

Хотя одна инструкция SSE2 может обрабатывать вдвое больше данных, чем инструкция MMX, производительность может незначительно повыситься. Две основные причины: доступ к данным SSE2 в памяти не выровнен к 16-байтовой границе может повлечь за собой значительные штрафы, и пропускная способность инструкций SSE2 в старых x86 реализация была вдвое меньше, чем для инструкций MMX. Intel решил первую проблему, добавив инструкцию в SSE3 сократить накладные расходы на доступ к невыровненным данным и улучшить общую производительность несовпадающих нагрузок, и последняя проблема за счет расширения механизма выполнения в их Основная микроархитектура в Core 2 Duo и более поздних версиях.

Поскольку файлы регистров MMX и x87 являются псевдонимами друг друга, использование MMX не позволит инструкциям x87 работать должным образом. После использования MMX программист должен использовать инструкцию emms (C: _mm_empty ()) для восстановления операции в регистровом файле x87. В некоторых операционных системах x87 используется не очень часто, но все же может использоваться в некоторых критических областях, таких как pow (), где требуется дополнительная точность. В таких случаях поврежденное состояние с плавающей запятой, вызванное отказом в выдаче emms, может остаться незамеченным для миллионов инструкций, прежде чем в конечном итоге вызовет сбой подпрограммы с плавающей запятой, вернув NaN. Поскольку проблема не проявляется локально в коде MMX, поиск и исправление ошибки может занять очень много времени. Поскольку SSE2 не имеет этой проблемы, обычно обеспечивает гораздо лучшую пропускную способность и предоставляет больше регистров в 64-битном коде, его следует предпочесть почти для всех работ по векторизации.

Streaming SIMD Extensions (SSE)

Introduction

SSE was introduced in the Pentium III and offered an additional 70 instructions to the Intel Instruction Set. SSE instructions can help give an increase in data thouroughput due to Single Instruction, Multiple Data (SIMD) instructions. These instructions can execute a common expression on multiple data in parallel.

There are 8 (16 in 64-bit mode) XMM registers (XMM0-7(15)) that come with SSE, and they are 128-bit registers. Certain SSE instructions (movntdqa, movdqa, movdqu, etc…) can load 16 bytes from memory or store 16 bytes to memory in a single operation. Also, SSE introduces a few non-temporal hint instructions (movntdqa and movntdq) that allow one-shot memory locations to be stored in non-temporal memory so those location references to do not pollute the small on-chip caches.

Since this change added new registers, it is disabled by default as the typical operating system of that time was not yet able to save those registers on a task switch. To support SSE, you will need to implement separate code paths for saving and restoring SSE state (as those instructions will cause an exception on processors that do not support it), and handlers for the new exceptions. After that, you can tell the CPU to enable SSE use in userland tasks.

Checking for SSE

to check for SSE CPUID.01h:EDX.SSE needs to be set

mov eax, 0x1
cpuid
test edx, 1<<25
jz .noSSE
;SSE is available

Adding support

In order to allow SSE instructions to be executed without generating a #UD, we need to alter the CR0 and CR4 registers.

clear the CR0.EM bit (bit 2) 
set the CR0.MP bit (bit 1) 
set the CR4.OSFXSR bit (bit 9) 
set the CR4.OSXMMEXCPT bit (bit 10) 

Here is an asm example:

;now enable SSE and the like
mov eax, cr0
and ax, 0xFFFB		;clear coprocessor emulation CR0.EM
or ax, 0x2			;set coprocessor monitoring  CR0.MP
mov cr0, eax
mov eax, cr4
or ax, 3 << 9		;set CR4.OSFXSR and CR4.OSXMMEXCPT at the same time
mov cr4, eax
ret

FXSAVE and FXRSTOR

FXSAVE and FXRSTOR are used to save and load the complete SSE, x87 FPU, and MMX states from memory. The host needs to allocate 512 bytes for the storage and use that memory pointer as an operand to either FXSAVE or FXRSTOR. Before using either of those instructions, make sure to check the CPUID features for the FXSR bit. Also, like most SSE instructions, the memory operand needs to be 16-byte aligned or a #GP exception will occur. Remember to execute FXSAVE *before* any MXCSR modifications happen, or else it the register will most likely get overwritten or set to 0 based on the unknown state of the MXCSR_MASK.

Example usage:

char fxsave_region512 __attribute__((aligned(16)));
asm volatile(" fxsave %0 "::"m"(fxsave_region));

or in asm:

segment .code
SaveFloats
fxsave SavedFloats
segment .data
align 16
SavedFloats TIMES 512 db 

Pitfalls: only one level of saving supported.

MXCSR and its helpers LDMXCSR and STMXCSR

The MXCSR register holds all of the masking and flag information for use with SSE floating-point operations. Just like the x87 FPU control word, if you would like to mask certain exceptions from occuring or would like to specify rounding types, MXCSR will need to be modified. Bits 16-31 are reserved and will cause a #GP exception if set. LDMXCSR and STMXCSR load and write the MXCSR register respectively. They both require a 32-bit memory operand. SSE support needs to already be set up before using either of these instructions (CR4.OSFXSR = 1, CR0.EM = 0, and CR0.TS = 0). If bits 7-12 are set, all SSE floating-point exceptions are masked. Bits 0-5 are exception status flags that are set if the corresponding exception has occured. Bits 13-14 are the RC (Rounding Control) bits. RC:0 = to nearest, RC:1 = down, RC:2 = up, RC:3 = truncate.

Использование компилятора

Когда SSE2 впервые была представлена ​​в 2000 году, она не поддерживалась средствами разработки программного обеспечения. Например, чтобы использовать SSE2 в Microsoft Visual Studio В проекте программист должен был либо вручную написать встроенную сборку, либо импортировать объектный код из внешнего источника. Позже пакет процессоров Visual C ++ добавил поддержку SSE2 в Visual C ++ и MASM.

В Компилятор Intel C ++ может автоматически генерировать SSE4, SSSE3, SSE3, SSE2 и SSE без использования ручной сборки.

Начиная с GCC 3, GCC может автоматически генерировать скалярный код SSE / SSE2, когда цель поддерживает эти инструкции. Автоматическая векторизация для SSE / SSE2 был добавлен с GCC 4.

В Компиляторный люкс Sun Studio также может генерировать инструкции SSE2, когда используется флаг компилятора -xvector = simd.

С Microsoft Visual C ++ 2012 параметр компилятора для генерации инструкций SSE2 включен по умолчанию.

Рейтинг
( Пока оценок нет )
Editor
Editor/ автор статьи

Давно интересуюсь темой. Мне нравится писать о том, в чём разбираюсь.

Понравилась статья? Поделиться с друзьями:
Сервис по настройке
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: