Из Википедии, бесплатной энциклопедии
Перейти к навигации Перейти к поиску
Одна инструкция, несколько данных

Одна команда, несколько данных ( SIMD ) - это класс параллельных компьютеров в таксономии Флинна . [ требуется пояснение ] Он описывает компьютеры с несколькими элементами обработки, которые одновременно выполняют одну и ту же операцию с несколькими точками данных. Такие машины используют параллелизм на уровне данных , но не параллелизм : есть одновременные (параллельные) вычисления, но только один процесс (инструкция) в данный момент. SIMD особенно подходит для общих задач, таких как регулировка контрастности цифрового изображения или регулировка громкости цифрового звука . Самый современныйКонструкции ЦП включают инструкции SIMD для повышения производительности использования мультимедиа . SIMD не следует путать с SIMT , в которой используются потоки .

История [ править ]

Первое использование инструкций SIMD было в ILLIAC IV , которое было завершено в 1966 году.

SIMD был основой векторных суперкомпьютеров начала 1970-х, таких как CDC Star-100 и Texas Instruments ASC , которые могли работать с «вектором» данных с помощью одной инструкции. Векторная обработка была особенно популярна Cray в 1970-х и 1980-х годах. Архитектуры векторной обработки теперь считаются отдельными от компьютеров SIMD, исходя из того факта, что векторные компьютеры обрабатывали векторы по одному слову за раз через конвейерные процессоры (хотя все еще основаны на одной инструкции), тогда как современные компьютеры SIMD обрабатывают все элементы вектора. одновременно. [1]

Первая эра современных SIMD-компьютеров характеризовалась суперкомпьютерами в стиле массовой параллельной обработки, такими как Thinking Machines CM-1 и CM-2 . На этих компьютерах было много процессоров с ограниченной функциональностью, которые могли работать параллельно. Например, каждый из 65 536 однобитовых процессоров в Thinking Machines CM-2 будет выполнять одну и ту же инструкцию в одно и то же время, позволяя, например, логически объединить 65 536 пар бит за раз, используя сеть, соединенную с гиперкубом или ОЗУ, выделенное процессору, для поиска его операндов. Суперкомпьютеры отошли от подхода SIMD, когда недорогие скалярные подходы MIMD основаны на обычных процессорах, таких как Intel i860 XP [2] стал более мощным, а интерес к SIMD ослаб.

Нынешняя эра процессоров SIMD выросла из рынка настольных компьютеров, а не из рынка суперкомпьютеров. Поскольку настольные процессоры стали достаточно мощными, чтобы поддерживать игры в реальном времени и обработку аудио / видео в течение 1990-х годов, спрос на этот конкретный тип вычислительной мощности вырос, и производители микропроцессоров обратились к SIMD, чтобы удовлетворить спрос. [3] Hewlett-Packard представила инструкции MAX в настольных компьютерах PA-RISC 1.1 в 1994 году для ускорения декодирования MPEG. [4] Sun Microsystems представила целочисленные инструкции SIMD в своих расширениях набора команд " VIS " в 1995 году в своем микропроцессоре UltraSPARC I. MIPS последовали их примеру, выпустив аналогичную систему MDMX .

Первым широко развернуты настольный SIMD был с Intel, MMX расширениями для x86 архитектуры в 1996 году вызвало введение гораздо более мощной AltiVec системы в Motorola PowerPC х и IBM, ЭЛЕКТРОСТАНЦИИ систем. В ответ Intel в 1999 году представила совершенно новую систему SSE . С тех пор было несколько расширений наборов инструкций SIMD для обеих архитектур. [5]

Все эти разработки были ориентированы на поддержку графики в реальном времени и, следовательно, ориентированы на обработку в двух, трех или четырех измерениях, обычно с длиной вектора от двух до шестнадцати слов, в зависимости от типа данных и архитектуры. Когда необходимо отличать новые архитектуры SIMD от старых, более новые архитектуры считаются архитектурами с «короткими векторами», поскольку более ранние суперкомпьютеры SIMD и векторные имели длину вектора от 64 до 64000. Современный суперкомпьютер почти всегда представляет собой кластер компьютеров MIMD, каждый из которых реализует инструкции SIMD (короткие векторные).

Преимущества [ править ]

Приложение, которое может использовать преимущества SIMD, - это приложение, в котором одно и то же значение добавляется (или вычитается из) большого количества точек данных, что является обычной операцией во многих мультимедийных приложениях. Одним из примеров может быть изменение яркости изображения. Каждый пиксель изображения состоит из трех значений яркости красной (R), зеленой (G) и синей (B) частей цвета. Для изменения яркости значения R, G и B считываются из памяти, к ним добавляется (или вычитается) значение, а полученные значения записываются обратно в память.

В процессоре SIMD есть два улучшения в этом процессе. С одной стороны, данные понимаются как блоки, и сразу несколько значений могут быть загружены. Вместо серии инструкций, говорящих «получить этот пиксель, теперь получить следующий пиксель», процессор SIMD будет иметь единственную инструкцию, которая фактически говорит «получить n пикселей» (где n - число, которое варьируется от проекта к проекту). По разным причинам это может занять гораздо меньше времени, чем получение каждого пикселя по отдельности, как при традиционной конструкции ЦП.

Еще одно преимущество состоит в том, что инструкция обрабатывает все загруженные данные за одну операцию. Другими словами, если система SIMD работает, загружая восемь точек данных одновременно, addоперация, применяемая к данным, будет выполняться для всех восьми значений одновременно. Этот параллелизм отличается от параллелизма, обеспечиваемого суперскалярным процессором ; восемь значений обрабатываются параллельно даже на не суперскалярном процессоре, и суперскалярный процессор может выполнять несколько операций SIMD параллельно.

Недостатки [ править ]

  • Не все алгоритмы легко векторизовать. Например, задача с тяжелым управлением потоком, такая как синтаксический анализ кода, не может легко выиграть от SIMD; однако теоретически можно векторизовать сравнения и «пакетный поток» для достижения максимальной оптимальности кеша, хотя этот метод потребует более промежуточного состояния. Примечание. Системы пакетного конвейера (например, графические процессоры или конвейеры растеризации программного обеспечения) наиболее полезны для управления кешем при реализации с внутренними функциями SIMD, но они не являются исключительными для функций SIMD. Дополнительная сложность может быть очевидной, чтобы избежать зависимости внутри ряда, такого как строки кода; в то время как для векторизации требуется независимость.
  • Большие регистровые файлы, увеличивающие энергопотребление и требуемую площадь чипа.
  • В настоящее время реализация алгоритма с инструкциями SIMD обычно требует человеческого труда; большинство компиляторов, например, не генерируют инструкции SIMD из типичной программы на языке C. Автоматическая векторизация в компиляторах - активная область компьютерных исследований. (Сравните векторную обработку .)
  • Программирование с использованием определенных наборов инструкций SIMD может включать в себя множество задач низкого уровня.
    1. SIMD может иметь ограничения на согласование данных ; программисты, знакомые с одной конкретной архитектурой, могут этого не ожидать.
    2. Сбор данных в регистры SIMD и их рассылка по правильным адресатам - сложная задача (иногда требующая операций перестановки) и может быть неэффективной.
    3. Конкретные инструкции, такие как поворот или сложение трех операндов, недоступны в некоторых наборах инструкций SIMD.
    4. Наборы инструкций зависят от архитектуры: некоторые процессоры полностью лишены инструкций SIMD, поэтому программисты должны предоставлять для них невекторизованные реализации (или другие векторизованные реализации).
    5. Различные архитектуры предоставляют разные размеры регистров (например, 64, 128, 256 и 512 бит) и наборы команд, что означает, что программисты должны предоставлять несколько реализаций векторизованного кода для оптимальной работы на любом заданном ЦП. Кроме того, возможный набор инструкций SIMD растет с каждым новым размером регистра.
    6. В раннем наборе команд MMX регистровый файл использовался совместно со стеком с плавающей запятой, что приводило к неэффективности при смешивании кода с плавающей запятой и MMX. Однако SSE2 исправляет это.

Чтобы исправить проблемы 1 и 5, векторное расширение RISC-V и ARM Scalable Vector Extension используют альтернативный подход: вместо того, чтобы открывать программисту детали подрегистрового уровня, набор команд абстрагирует их как несколько "векторных регистров". "которые используют одни и те же интерфейсы для всех процессоров с этим набором команд. Аппаратное обеспечение решает все проблемы с выравниванием и «извлечением» петель. Машины с разными размерами векторов могут запускать один и тот же код. [6] LLVM называет этот векторный тип «vscale».

Хронология [ править ]

Примеры суперкомпьютеров SIMD (не включая векторные процессоры ):

  • ИЛЛИАК IV , c. 1974 г.
  • Процессор распределенных массивов ICL (DAP), c. 1974 г.
  • Научный процессор Берроуза, c. 1976 г.
  • Геометрическо-арифметический параллельный процессор от Martin Marietta , начиная с 1981 года, продолжил работу в Lockheed Martin , затем в Teranex и Silicon Optix.
  • Массивно-параллельный процессор (MPP) от NASA / Goddard Space Flight Center , c. 1983–1991
  • Соединительная машина , модели 1 и 2 (CM-1 и CM-2), от Thinking Machines Corporation , c. 1985 г.
  • МасПар МП-1 и МП-2, г. 1987–1996
  • Компьютер Zephyr DC от Wavetracer, c. 1991 г.
  • Xplor от Pyxsys, Inc. , c. 2001 г.

Оборудование [ править ]

Маломасштабные (64 или 128 бит) SIMD стали популярными в процессорах общего назначения в начале 1990-х годов и продолжались до 1997 года и позже с инструкциями по движению видео (MVI) для Alpha . Инструкции SIMD можно найти в той или иной степени, в большинстве процессоров, в том числе IBM 'S AltiVec и SPE для PowerPC , HP ' s PA-RISC Мультимедиа ускорения НАРАЩЕННЫЕ (MAX), Intel «s MMX и iwMMXt , SSE , SSE2 , SSE3 SSSE3 и SSE4.x , AMD «S 3DNow! ,ARC 'подсистемы ARC Video s, SPARC ' s VIS и VIS2, ВС «s MAJC , ARM 's неоновые технологии, MIPS ' MdmX (MadMax) и MIPS-3D . В IBM, Sony, Toshiba совместно разработали Cell Processor 'сек SPU набор команд' s сильно SIMD основе. Philips , ныне NXP , разработала несколько процессоров SIMD под названием Xetal . Xetal имеет 320 16-битных процессорных элементов, специально разработанных для задач зрения.

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

Последние SIMD-инструкции Intel AVX-512 теперь обрабатывают 512 бит данных одновременно.

Программное обеспечение [ править ]

Обычное утроение четырех 8-битных чисел. ЦП загружает одно 8-битное число в R1, умножает его на R2, а затем сохраняет ответ из R3 обратно в ОЗУ. Этот процесс повторяется для каждого числа.
SIMD утроение четырех 8-битных чисел. ЦП загружает сразу 4 числа, умножает их все за одно SIMD-умножение и сохраняет все сразу обратно в ОЗУ. Теоретически скорость можно умножить на 4.

Инструкции SIMD широко используются для обработки 3D-графики, хотя современные видеокарты со встроенной SIMD в значительной степени переняли эту задачу от ЦП. Некоторые системы также включают функции перестановки, которые повторно упаковывают элементы внутри векторов, что делает их особенно полезными для обработки и сжатия данных. Они также используются в криптографии. [7] [8] [9] Тенденция универсальных вычислений на графических процессорах ( GPGPU ) может привести к более широкому использованию SIMD в будущем.

Внедрение систем SIMD в программное обеспечение для персональных компьютеров поначалу шло медленно из-за ряда проблем. Во-первых, многие из ранних наборов инструкций SIMD имели тенденцию снижать общую производительность системы из-за повторного использования существующих регистров с плавающей запятой. Другие системы, такие как MMX и 3DNow! , предлагала поддержку типов данных, которые не были интересны широкой аудитории и имели дорогостоящие инструкции переключения контекста для переключения между использованием регистров FPU и MMX . Компиляторам также часто не хватало поддержки, что заставляло программистов прибегать к кодированию на языке ассемблера .

SIMD на x86 запускалась медленно. Введение 3DNow! от AMD и SSE по Intel спутать вопросы несколько, но сегодня система , кажется, успокоились (после того, как AMD приняла SSE) и новые компиляторы должны привести к более SIMD с поддержкой программного обеспечения. Intel и AMD теперь предоставляют оптимизированные математические библиотеки, использующие инструкции SIMD, и начали появляться альтернативы с открытым исходным кодом, такие как libSIMD , SIMDx86 и SLEEF (см. Также libm ). [10]

Apple Computer имела несколько больший успех, хотя вышла на рынок SIMD позже остальных. AltiVec предлагает богатую систему и ее можно программировать с использованием все более сложных компиляторов от Motorola , IBM и GNU , поэтому программирование на ассемблере требуется редко. Кроме того, многие из систем, которые выиграют от SIMD, были поставлены самой Apple, например iTunes и QuickTime . Однако в 2006 году компьютеры Apple перешли на процессоры Intel x86. API-интерфейсы Apple и инструменты разработки ( XCode ) были изменены для поддержки SSE2 и SSE3.а также AltiVec. Apple была основным покупателем микросхем PowerPC у IBM и Freescale Semiconductor, и даже несмотря на то, что они отказались от платформы, дальнейшее развитие AltiVec продолжается в нескольких проектах PowerPC и Power ISA от Freescale и IBM.

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

Интерфейс программиста [ править ]

Издатели наборов инструкций SIMD обычно создают свои собственные расширения языка C / C ++ с внутренними функциями или специальными типами данных, гарантирующими генерацию векторного кода. Intel, AltiVec и ARM NEON предоставляют расширения, широко используемые компиляторами для их процессоров. (Более сложные операции - задача векторных математических библиотек.)

GNU C Compiler принимает расширения шага вперед, абстрагирование их в универсальный интерфейс , который может быть использован на любой платформе, предоставляя способ определения SIMD типов данных. [11] LLVM Clang компилятор также реализует функцию, с аналогичной интерфейс , определенной в ИК. [12] Ящик Pack_simd в Rust использует этот интерфейс, как и Swift 2.0+.

C ++ имеет экспериментальный интерфейс, std::experimental::simdкоторый работает аналогично расширению GCC. Кажется, это реализована в libcxx LLVM. Для GCC и libstdc ++ доступна библиотека-оболочка, которая строится поверх расширения GCC. [13]

Microsoft добавила SIMD в .NET в RyuJIT. [14]System.Numerics.Vector пакет, доступный на NuGet, осуществлять SIMD типов данных. [15]

Вместо того, чтобы предоставлять тип данных SIMD, компиляторы могут также получить указание на автоматическую векторизацию некоторых циклов, потенциально принимая некоторые утверждения об отсутствии зависимости данных. Это не так гибко, как прямое управление переменными SIMD, но проще в использовании. В OpenMP 4.0+ есть #pragma omp simdподсказка. [16] У Силка есть похожая функция #pragma simd. [17] GCC и Clang также имеют свои собственные частные прагмы для векторизации циклов, но все три были сделаны устаревшими OpenMP.

Поддержка нескольких версий SIMD [ править ]

Обычно ожидается, что потребительское программное обеспечение будет работать на ряде процессоров, охватывающих несколько поколений, что может ограничить способность программиста использовать новые инструкции SIMD для повышения вычислительной производительности программы. Решение состоит в том, чтобы включить несколько версий одного и того же кода, в котором используются либо старые, либо новые технологии SIMD, и выбрать ту, которая лучше всего соответствует процессору пользователя во время выполнения ( динамическая отправка ). Есть два основных лагеря решений:

  • Управление версиями функций: подпрограмма в программе или библиотеке дублируется и компилируется для многих расширений набора команд, и программа решает, какое из них использовать во время выполнения.
  • Поддержка нескольких версий библиотеки: вся программная библиотека дублируется для многих расширений набора команд, и операционная система или программа решают, какое из них загружать во время выполнения.

Первое решение поддерживается компилятором Intel C ++ , сборником компиляторов GNU с GCC 6 и Clang с clang 7. Однако, поскольку GCC и clang требуют явных target_clonesметок для «клонирования» функций, более простой способ сделать это - скомпилировать несколько версий. библиотеки и пусть система glibc выберет один, подход, принятый поддерживаемым Intel проектом Clear Linux. [18]

Язык программирования Rust также поддерживает многовариантность. Клонирование может быть выполнено путем вызова исходной функции, так что встраивание вступает во владение. [19]

SIMD в Интернете [ править ]

В 2013 году Джон Маккатчан объявил, что он создал высокопроизводительный интерфейс для наборов инструкций SIMD для языка программирования Dart , впервые применив преимущества SIMD в веб-программах. Интерфейс бывает двух типов: [20]

  • Float32x4, 4 значения с плавающей запятой одинарной точности.
  • Int32x4, 4 32-битных целых числа.

Экземпляры этих типов неизменяемы и в оптимизированном коде отображаются непосредственно в регистры SIMD. Операции, выраженные в Dart, обычно компилируются в одну инструкцию без каких-либо накладных расходов. Это похоже на встроенные функции C и C ++. Тесты для умножения матриц 4 × 4 , трехмерного преобразования вершин и визуализации множеств Мандельброта показывают почти 400% ускорение по сравнению со скалярным кодом, написанным на Dart.

Работа МакКатчана над Dart, которая теперь называется SIMD.js, была принята ECMAScript, и Intel объявила на IDF 2013, что они внедряют спецификацию МакКатчана как для V8, так и для SpiderMonkey . [21] Однако к 2017 году SIMD.js был исключен из стандартной очереди ECMAScript в пользу использования аналогичного интерфейса в WebAssembly . [22] По состоянию на август 2020 года интерфейс WebAssembly остается незавершенным, но его портативная 128-битная функция SIMD уже нашла применение во многих движках.

Emscripten, компилятор Mozilla C / C ++ - to-JavaScript, с расширениями, может включать компиляцию программ C ++, которые используют встроенные функции SIMD или векторный код в стиле GCC, в SIMD API JavaScript, что приводит к эквивалентному ускорению по сравнению со скалярным кодом. [23] Он также поддерживает 128-битное предложение SIMD WebAssembly. [24]

Коммерческие приложения [ править ]

Хотя, как правило, оказалось трудно найти устойчивые коммерческие приложения для процессоров, поддерживающих только SIMD, одним из наиболее успешных является GAPP , разработанный Lockheed Martin и внедренный в коммерческий сектор их дочерней компанией Teranex . Недавние воплощения GAPP стали мощным инструментом в приложениях обработки видео в реальном времени, таких как преобразование между различными стандартами видео и частотой кадров ( NTSC в / из PAL , NTSC в / из форматов HDTV и т. Д.), Деинтерлейсинг , уменьшение шума изображения , адаптивная сжатие видео и улучшение изображения.

Более распространенное приложение для SIMD можно найти в видеоиграх : почти каждая современная игровая консоль с 1998 года включала процессор SIMD в свою архитектуру. PlayStation 2 был необычен тем , что один из его вектора-флоит единиц могут функционировать в качестве автономного DSP выполняет свой собственный поток команд, или в качестве сопроцессора ведомого обычных команд центрального процессора. Приложения 3D-графики, как правило, хорошо поддаются обработке SIMD, поскольку они в значительной степени полагаются на операции с 4-мерными векторами. Microsoft «s Direct3D 9.0 теперь выбирает во время выполнения специфичные для процессора реализации собственных математических операций, включая использование команд с поддержкой SIMD.

Одним из последних процессоров, использующих векторную обработку, является Cell Processor, разработанный IBM в сотрудничестве с Toshiba и Sony . Он использует несколько процессоров SIMD ( архитектура NUMA , каждый с независимым локальным хранилищем и управляемый ЦП общего назначения) и ориентирован на огромные наборы данных, необходимые для приложений обработки 3D и видео. Он отличается от традиционных ISA тем, что изначально является SIMD без отдельных скалярных регистров.

Ziilabs произвела процессор типа SIMD для использования на мобильных устройствах, таких как медиаплееры и мобильные телефоны. [25]

Крупномасштабные коммерческие процессоры SIMD доступны от ClearSpeed ​​Technology, Ltd. и Stream Processors, Inc. ClearSpeed CSX600 (2004) имеет 96 ядер, каждое с двумя модулями с плавающей запятой двойной точности, в то время как CSX700 (2008) имеет 192 процессора. во главе с компьютерным архитектором Биллом Далли . Их процессор Storm-1 (2007) содержит 80 ядер SIMD, управляемых процессором MIPS.

См. Также [ править ]

  • Потоковые расширения SIMD , MMX , SSE2 , SSE3 , расширенные векторные расширения , AVX-512
  • архитектура набора команд
  • SIMD в регистре (SWAR)
  • Одна программа, несколько данных (SPMD)
  • OpenCL

Ссылки [ править ]

  1. ^ Паттерсон, Дэвид А .; Хеннесси, Джон Л. (1998). Компьютерная организация и дизайн: аппаратно-программный интерфейс (2-е изд.). Морган Кауфманн. п. 751 . ISBN 155860491X.
  2. ^ "MIMD1 - XP / S, CM-5" (PDF) .
  3. ^ Conte, G .; Tommesani, S .; Заничелли, Ф. (2000). «Долгий и извилистый путь к высокопроизводительной обработке изображений с помощью MMX / SSE». Proc. Пятый международный семинар IEEE по компьютерным архитектурам для машинного восприятия . DOI : 10.1109 / CAMP.2000.875989 . hdl : 11381/2297671 . S2CID 13180531 . 
  4. ^ Ли, РБ (1995). «Видео в формате MPEG в реальном времени посредством программной декомпрессии на процессоре PA-RISC». сборник бумаг Compcon 95 года. Технологии для информационной супермагистрали . С. 186–192. DOI : 10.1109 / CMPCON.1995.512384 . ISBN 0-8186-7029-0. S2CID  2262046 .
  5. ^ Миттал, Спарш; Ананд, Ошо; Кумар, Вишну П. (май 2019 г.). «Обзор по оценке и оптимизации производительности Intel Xeon Phi» .
  6. ^ Паттерсон, Дэвид; Уотерман, Эндрю (18 сентября 2017 г.). «Инструкции SIMD считаются вредными» . СИГАРЧ .
  7. ^ RE: скорость SSE2 , показывающая, как SSE2 используется для реализации алгоритмов хеширования SHA.
  8. ^ Скорость Salsa20; Программное обеспечение Salsa20 , демонстрирующее потоковый шифр, реализованный с использованием SSE2
  9. ^ Тема: пропускная способность RSA до 1,4x с использованием SSE2 , показывающая, что RSA реализовано с использованием не-SIMD инструкции целочисленного умножения SSE2.
  10. ^ "Математические функции библиотеки SIMD" . Переполнение стека . Проверено 16 января 2020 года .
  11. ^ "Векторные расширения" . Использование коллекции компиляторов GNU (GCC) . Проверено 16 января 2020 года .
  12. ^ "Расширения языка Clang" . Документация по Clang 11 . Проверено 16 января 2020 года .
  13. ^ "VcDevel / std-simd" . VcDevel. 6 августа 2020.
  14. ^ «RyuJIT: JIT-компилятор нового поколения для .NET» .
  15. ^ "Наконец-то предложили JIT. JIT и SIMD женятся" .
  16. ^ "Директивы SIMD" . www.openmp.org .
  17. ^ "Учебник pragma simd" . CilkPlus . 18 июля 2012 г.
  18. ^ «Прозрачное использование пакетов библиотек, оптимизированных для архитектуры Intel®» . Очистите Linux * Project . Проверено 8 сентября 2019 .
  19. ^ "2045-цель-особенность" . Книга RFC Rust .
  20. ^ Джон МакКатчан. «Перенос SIMD в Интернет через Dart» (PDF) . Архивировано из оригинального (PDF) 03.12.2013.
  21. ^ «SIMD в JavaScript» . 01.org . 8 мая 2014.
  22. ^ "tc39 / ecmascript_simd: числовой тип SIMD для EcmaScript" . GitHub . Ecma TC39. 22 августа 2019 . Проверено 8 сентября 2019 .
  23. ^ Дженсен, Питер; Джибаджа, Иван; Ху, Нинсинь; Гохман, Дэн; Маккатчан, Джон (2015). «SIMD в JavaScript через C ++ и Emscripten» (PDF) . Цитировать журнал требует |journal=( помощь )
  24. ^ "Перенос кода SIMD на WebAssembly" . Документация Emscripten 1.40.1 .
  25. ^ "ZiiLABS ZMS-05 ARM 9 Медиа-процессор" . ZiiLabs . Архивировано из оригинала на 2011-07-18 . Проверено 24 мая 2010 .

Внешние ссылки [ править ]

  • Архитектуры SIMD (2000)
  • Взломать Pentium 3 (1999)
  • Короткие векторные расширения в коммерческих микропроцессорах
  • Статья об оптимизации конвейера рендеринга анимированных моделей с использованием расширений Intel Streaming SIMD
  • «Yeppp!»: Кроссплатформенная библиотека SIMD с открытым исходным кодом от Технологического института Джорджии.
  • Введение в параллельные вычисления от Ливерморской национальной лаборатории LLNL
  • simde на GitHub : переносимая реализация встроенных функций для других платформ (например, встроенных функций SSE для ARM NEON) с использованием заголовков C / C ++