SPARC ( Scalable Processor ARChitecture ) — это архитектура набора инструкций компьютера с сокращенным набором команд (RISC), первоначально разработанная Sun Microsystems . [1] [2] На ее конструкцию сильно повлияла экспериментальная система Berkeley RISC, разработанная в начале 1980-х годов. Впервые разработанная в 1986 году и выпущенная в 1987 году, [3] [2] SPARC была одной из самых успешных ранних коммерческих систем RISC, и ее успех привел к внедрению аналогичных конструкций RISC многими поставщиками в 1980-х и 1990-х годах.
Первая реализация оригинальной 32-разрядной архитектуры (SPARC V7) использовалась в компьютерных рабочих станциях и серверных системах Sun-4 компании Sun, заменив их более ранние системы Sun-3 на базе серии процессоров Motorola 68000. SPARC V8 добавил ряд улучшений, которые были частью серии процессоров SuperSPARC , выпущенной в 1992 году. SPARC V9, выпущенный в 1993 году, представил 64-разрядную архитектуру и впервые был выпущен в процессорах UltraSPARC компании Sun в 1995 году. Позднее процессоры SPARC использовались в серверах с симметричной многопроцессорной обработкой (SMP) и неоднородным доступом к памяти ( CC-NUMA ), производимых Sun, Solbourne и Fujitsu , среди прочих.
Проект был передан торговой группе SPARC International в 1989 году, и с тех пор ее архитектура разрабатывалась ее членами. SPARC International также отвечает за лицензирование и продвижение архитектуры SPARC, управление товарными знаками SPARC (включая SPARC, которым она владеет) и обеспечение тестирования на соответствие . SPARC International была призвана развивать архитектуру SPARC для создания более крупной экосистемы; SPARC был лицензирован несколькими производителями, включая Atmel , Bipolar Integrated Technology , Cypress Semiconductor , Fujitsu , Matsushita и Texas Instruments . Благодаря SPARC International, SPARC является полностью открытым, непатентованным и безвозмездным.
По состоянию на 2024 год новейшими коммерческими процессорами SPARC высокого класса являются SPARC64 XII компании Fujitsu (представленный в сентябре 2017 года для сервера SPARC M12) и SPARC M8 компании Oracle , представленный в сентябре 2017 года для серверов высокого класса.
1 сентября 2017 года, после серии увольнений, начавшихся в Oracle Labs в ноябре 2016 года, Oracle прекратила разработку SPARC после завершения M8. Большая часть группы разработчиков ядра процессора в Остине, штат Техас, была уволена, как и команды в Санта-Кларе, штат Калифорния, и Берлингтоне, штат Массачусетс. [4] [5]
Fujitsu также прекратит производство SPARC (уже перешла на производство собственных процессоров на базе ARM ) после двух «улучшенных» версий старого сервера Fujitsu SPARC M12 в 2020–2022 годах (ранее планировалось на 2021 год) и снова в 2026–2027 годах, окончания продаж в 2029 году серверов UNIX и годом позже — мэйнфреймов и окончания поддержки в 2034 году «для содействия модернизации клиентов». [6]
Архитектура SPARC находилась под сильным влиянием более ранних разработок RISC, включая RISC I и II из Калифорнийского университета в Беркли и IBM 801. Эти оригинальные разработки RISC были минималистичными, включали как можно меньше функций или кодов операций и были нацелены на выполнение инструкций со скоростью почти одна инструкция за такт . Это делало их похожими на архитектуру MIPS во многих отношениях, включая отсутствие таких инструкций, как умножение или деление. Еще одной особенностью SPARC, на которую повлияло это раннее движение RISC, является слот задержки ветвления .
Процессор SPARC обычно содержит до 160 регистров общего назначения . Согласно спецификации «Oracle SPARC Architecture 2015», «реализация может содержать от 72 до 640 64-битных регистров общего назначения». [7] В любой момент времени только 32 из них видны программному обеспечению — 8 представляют собой набор глобальных регистров (один из которых, g0 , жестко связан с нулем, поэтому только семь из них можно использовать как регистры), а остальные 24 находятся в стеке регистров . Эти 24 регистра образуют то, что называется окном регистров , и при вызове/возврате функции это окно перемещается вверх и вниз по стеку регистров. Каждое окно имеет восемь локальных регистров и разделяет восемь регистров с каждым из соседних окон. Общие регистры используются для передачи параметров функции и возврата значений, а локальные регистры используются для сохранения локальных значений между вызовами функций.
«Масштабируемость» в SPARC проистекает из того факта, что спецификация SPARC позволяет масштабировать реализации от встроенных процессоров до больших серверных процессоров, все из которых используют один и тот же основной (непривилегированный) набор инструкций. Одним из масштабируемых архитектурных параметров является количество реализованных окон регистров; спецификация позволяет реализовать от трех до 32 окон, поэтому реализация может выбрать реализацию всех 32 для обеспечения максимальной эффективности стека вызовов или реализацию только трех для снижения стоимости и сложности конструкции или реализацию некоторого числа между ними. Другие архитектуры, которые включают в себя схожие функции регистровых файлов , включают Intel i960 , IA-64 и AMD 29000 .
Архитектура прошла через несколько ревизий. Она получила аппаратную функциональность умножения и деления в версии 8. [8] [9] 64-бит (адресация и данные) были добавлены в спецификацию SPARC версии 9, опубликованную в 1994 году. [10]
В SPARC версии 8 регистровый файл с плавающей точкой имеет 16 регистров двойной точности . Каждый из них может использоваться как два регистра одинарной точности , обеспечивая в общей сложности 32 регистра одинарной точности. Пара нечетных и четных чисел регистров двойной точности может использоваться как регистр учетверенной точности , что позволяет использовать 8 регистров учетверенной точности. SPARC версии 9 добавила еще 16 регистров двойной точности (к которым также можно получить доступ как к 8 регистрам учетверенной точности), но к этим дополнительным регистрам нельзя получить доступ как к регистрам одинарной точности. Ни один процессор SPARC не реализует операции учетверенной точности на аппаратном уровне по состоянию на 2024 год. [11]
Инструкции добавления и вычитания с тегами выполняют сложения и вычитания значений, проверяя, что нижние два бита обоих операндов равны 0, и сообщая о переполнении, если это не так. Это может быть полезно при реализации времени выполнения для ML , Lisp и подобных языков, которые могут использовать формат целочисленных тегов.
Порядок байтов в 32-битной архитектуре SPARC V8 — чисто big-endian. 64-битная архитектура SPARC V9 использует big-endian инструкции, но может получать доступ к данным как в big-endian, так и в little-endian порядке байтов, выбираемом либо на уровне инструкций приложения ( load-store ), либо на уровне страницы памяти (через настройку MMU). Последний часто используется для доступа к данным с изначально little-endian устройств, например, на шинах PCI.
Было три основных пересмотра архитектуры. Первой опубликованной версией была 32-битная версия SPARC 7 (V7) в 1986 году. SPARC версии 8 (V8), улучшенное определение архитектуры SPARC, было выпущено в 1990 году. Основными отличиями между V7 и V8 были добавление инструкций целочисленного умножения и деления, а также обновление с 80-битной арифметики с плавающей точкой «расширенной точности» до 128-битной арифметики « четверной точности ». SPARC V8 послужил основой для стандарта IEEE 1754-1994, стандарта IEEE для 32-битной архитектуры микропроцессора.
SPARC версии 9 , 64-битная архитектура SPARC, была выпущена SPARC International в 1993 году. Она была разработана Комитетом по архитектуре SPARC, состоящим из Amdahl Corporation , Fujitsu , ICL , LSI Logic , Matsushita , Philips , Ross Technology , Sun Microsystems и Texas Instruments . Более новые спецификации всегда остаются соответствующими полной спецификации SPARC V9 Level 1.
В 2002 году Fujitsu и Sun выпустили SPARC Joint Programming Specification 1 (JPS1), описывающую функции процессора, которые были идентично реализованы в процессорах обеих компаний («Общность»). Первыми процессорами, соответствующими JPS1, были UltraSPARC III от Sun и SPARC64 V от Fujitsu. Функциональность, не охватываемая JPS1, документирована для каждого процессора в «Дополнениях к реализации».
В конце 2003 года был выпущен JPS2 для поддержки многоядерных процессоров. Первыми процессорами, соответствующими JPS2, были UltraSPARC IV от Sun и SPARC64 VI от Fujitsu.
В начале 2006 года Sun выпустила расширенную спецификацию архитектуры UltraSPARC Architecture 2005. Она включает в себя не только непривилегированные и большую часть привилегированных частей SPARC V9, но и все архитектурные расширения, разработанные в поколениях процессоров UltraSPARC III, IV IV+, а также расширения CMT, начиная с реализации UltraSPARC T1 :
В 2007 году компания Sun выпустила обновленную спецификацию UltraSPARC Architecture 2007 , которой соответствовала реализация UltraSPARC T2 .
В декабре 2007 года Sun также сделала RTL процессора UltraSPARC T2 доступным через проект OpenSPARC . [12] Он также был выпущен под лицензией GNU General public license v2. [13] OpenSPARC T2 имеет 8 ядер, 16 конвейеров и 64 потока.
В августе 2012 года корпорация Oracle представила новую спецификацию Oracle SPARC Architecture 2011 , которая, помимо общего обновления справочника, добавляет расширения набора инструкций VIS 3 и гиперпривилегированный режим к спецификации 2007 года. [14]
В октябре 2015 года Oracle выпустила SPARC M7, первый процессор, основанный на новой спецификации Oracle SPARC Architecture 2015. [7] [15] Эта версия включает расширения набора инструкций VIS 4, аппаратное шифрование и кремниевую защищенную память (SSM). [16]
Архитектура SPARC обеспечивала непрерывную двоичную совместимость приложений с первой реализации SPARC V7 в 1987 году и вплоть до реализаций архитектуры Sun UltraSPARC.
Среди различных реализаций SPARC, Sun's SuperSPARC и UltraSPARC-I были очень популярны и использовались в качестве референсных систем для тестов SPEC CPU95 и CPU2000. 296 МГц UltraSPARC-II является референсной системой для теста SPEC CPU2006.
SPARC — это архитектура загрузки-сохранения (также известная как архитектура регистр-регистр ); за исключением инструкций загрузки/сохранения, используемых для доступа к памяти , все инструкции работают с регистрами в соответствии с принципами проектирования RISC.
Процессор SPARC включает в себя целочисленный блок (IU), который выполняет целочисленные операции загрузки, сохранения и арифметические операции. [17] : 9 [10] : 15–16 Он может включать в себя блок с плавающей точкой (FPU), который выполняет операции с плавающей точкой [17] : 9 [10] : 15–16 и, для SPARC V8, может включать в себя сопроцессор (CP), который выполняет операции, специфичные для сопроцессора; архитектура не определяет, какие функции будет выполнять сопроцессор, кроме операций загрузки и сохранения. [17] : 9
Архитектура SPARC имеет схему перекрывающихся окон регистров. В любой момент времени видны 32 регистра общего назначения. Переменная Current Window Pointer ( CWP ) в оборудовании указывает на текущий набор. Общий размер файла регистров не является частью архитектуры, что позволяет добавлять больше регистров по мере совершенствования технологии, вплоть до 32 окон в SPARC V7 и V8, поскольку CWP составляет 5 бит и является частью регистра PSR .
В SPARC V7 и V8 CWP обычно уменьшается инструкцией SAVE (используется инструкцией SAVE во время вызова процедуры для открытия нового стекового кадра и переключения окна регистра) или увеличивается инструкцией RESTORE (переключение обратно к вызову перед возвратом из процедуры). События прерывания ( прерывания , исключения или инструкции TRAP) и инструкции RETT (возврат из прерываний) также изменяют CWP . Для SPARC V9 регистр CWP уменьшается во время инструкции RESTORE и увеличивается во время инструкции SAVE. Это противоположно поведению PSR.CWP в SPARC V8. Это изменение не влияет на непривилегированные инструкции.
Регистры SPARC показаны на рисунке выше.
Также имеется неоконный регистр Y, используемый инструкциями пошагового умножения, целочисленного умножения и целочисленного деления. [17] : 32
Процессор SPARC V8 с FPU включает 32 32-битных регистра с плавающей точкой, каждый из которых может содержать одно число с плавающей точкой одинарной точности IEEE 754. Четная-нечетная пара регистров с плавающей точкой может содержать одно число с плавающей точкой двойной точности IEEE 754, а четверная группа из четырех регистров с плавающей точкой может содержать одно число с плавающей точкой четверной точности IEEE 754. [17] : 10
Процессор SPARC V9 с FPU включает в себя: [10] : 36–40
Регистры организованы как набор из 64 32-битных регистров, причем первые 32 используются как 32-битные регистры с плавающей точкой, четные-нечетные пары всех 64 регистров используются как 64-битные регистры с плавающей точкой, а четверные выровненные группы из четырех регистров с плавающей точкой используются как 128-битные регистры с плавающей точкой.
Регистры с плавающей точкой не являются оконными; все они являются глобальными регистрами. [10] : 36–40
Все инструкции SPARC занимают полное 32-битное слово и начинаются на границе слова. Используются четыре формата, различающиеся первыми двумя битами. Все арифметические и логические инструкции имеют 2 исходных операнда и 1 целевой операнд. [18] RD — это «целевой регистр», куда помещается вывод операции. Большинство инструкций SPARC имеют по крайней мере этот регистр, поэтому он размещается рядом с «передней частью» формата инструкции. RS1 и RS2 — это «исходные регистры», которые могут присутствовать или отсутствовать, или заменяться константой.
Инструкции загрузки и сохранения имеют формат с тремя операндами, в котором два операнда представляют значения для адреса, а один операнд для регистра для чтения или записи. Адрес создается путем сложения двух операндов адреса для получения адреса. Второй операнд адреса может быть константой или регистром. Загрузки берут значение по адресу и помещают его в регистр, указанный третьим операндом, тогда как сохранения берут значение из регистра, указанного первым операндом, и помещают его по адресу. Чтобы сделать это более очевидным, язык ассемблера указывает операнды адреса с помощью квадратных скобок со знаком плюс, разделяющим операнды, вместо использования списка, разделенного запятыми. Примеры: [18]
ld [%L1+%L2],%L3 !загрузить 32-битное значение по адресу %L1+%L2 и поместить значение в %L3ld [%L1+8],%L2 !загрузить значение из %L1+8 в %L2ld [%L1],%L2 !как указано выше, но без смещения, что то же самое, что и +%G0st %L1,[%I2] !сохранить значение в %L1 в месте, сохранённом в %I2st %G0,[%I1+8] !очистить память в %I1+8
В связи с широким распространением не 32-битных данных, таких как 16-битные или 8-битные целые данные или 8-битные байты в строках, существуют инструкции, загружающие и сохраняющие 16-битные полуслова и 8-битные байты, а также инструкции, загружающие 32-битные слова. Во время загрузки эти инструкции будут считывать только байт или полуслово в указанном месте, а затем либо заполнять остаток целевого регистра нулями (беззнаковая загрузка), либо значением самого верхнего бита байта или полуслова (знаковая загрузка). Во время сохранения эти инструкции отбрасывают верхние биты в регистре и сохраняют только нижние биты. Существуют также инструкции для загрузки значений двойной точности, используемых для арифметики с плавающей точкой , чтения или записи восьми байтов из указанного регистра и «следующего», поэтому, если местом назначения загрузки является L1, будут установлены L1 и L2. Полный список инструкций загрузки и сохранения для регистров общего назначения в 32-битном SPARC выглядит следующим образом LD
: (беззнаковый байт), ST
( знаковый байт), (беззнаковое полуслово), (знаковое полуслово), (загрузка double), (сохранение байта), (сохранение half-word), (сохранение double). [18]LDUB
LDSB
LDUH
LDSH
LDD
STB
STH
STD
В SPARC V9 регистры 64-битные, и LD
инструкция, переименованная LDUW
, очищает верхние 32 бита в регистре и загружает 32-битное значение в нижние 32 бита, а инструкция ST
, переименованная STW
, отбрасывает верхние 32 бита регистра и сохраняет только нижние 32 бита. Новая LDSW
инструкция устанавливает верхние биты в регистре в значение самого верхнего бита слова и загружает 32-битное значение в нижние биты. Новая LDX
инструкция загружает 64-битное значение в регистр, и STX
инструкция сохраняет все 64 бита регистра.
Инструкции LDF
, LDDF
, и LDQF
загружают значение одинарной, двойной или учетверенной точности из памяти в регистр с плавающей точкой; инструкции STF
, STDF
, и STQF
сохраняют регистр с плавающей точкой одинарной, двойной или учетверенной точности в памяти.
Инструкция барьера памяти MEMBAR служит двум взаимосвязанным целям: она артикулирует ограничения порядка среди ссылок памяти и облегчает явный контроль над завершением ссылок памяти. Например, все эффекты хранилищ, которые появляются до инструкции MEMBAR, должны быть сделаны видимыми для всех процессоров, прежде чем любые загрузки, следующие за MEMBAR, могут быть выполнены. [19]
Арифметические и логические инструкции также используют формат из трех операндов, где первые два являются операндами, а последний — местом хранения результата. Средний операнд может быть регистром или 13-битной целочисленной константой со знаком; другие операнды — регистры. Любой из операндов регистра может указывать на G0; указание результата на G0 отбрасывает результаты, которые можно использовать для тестов. Вот некоторые примеры: [18]
добавить %L1,%L2,%L3 !сложить значения в %L1 и %L2 и поместить результат в %L3добавить %L1,1,%L1 !увеличить %L1добавить %G0,%G0,%L4 !очистить все значения в %L4
Список математических инструкций: ADD
, SUB
, AND
, OR
, XOR
, и отрицательные версии ANDN
, ORN
, и XNOR
. Одной из особенностей конструкции SPARC является то, что большинство арифметических инструкций идут парами, причем одна версия устанавливает биты кода условия NZVC в регистре состояния , а другая не устанавливает их, причем по умолчанию коды не устанавливаются. Это сделано для того, чтобы компилятор имел возможность перемещать инструкции при попытке заполнить слоты задержки. Если требуется установить коды условий, это указывается добавлением cc
к инструкции: [18]
subcc %L1,10,%G0 !сравнить %L1 с 10 и проигнорировать результат, но установить флаги
У add и sub также есть еще один модификатор, X, который указывает, должна ли операция устанавливать бит переноса:
addx %L1,100,%L1 !добавьте 100 к значению в %L1 и отслеживайте перенос
SPARC V7 не имеет инструкций умножения или деления, но имеет MULSCC
, который выполняет один шаг умножения, проверяя один бит и условно добавляя множимое к произведению. Это было потому, что MULSCC
может завершиться за один такт в соответствии с философией RISC. SPARC V8 добавил инструкции UMUL
(беззнаковое умножение), SMUL
(знаковое умножение), UDIV
(беззнаковое деление) и SDIV
(знаковое деление), причем обе версии не обновляют коды условий, а версии обновляют. MULSCC
и инструкции умножения используют регистр Y для хранения старших 32 бит произведения; инструкции деления используют его для хранения старших 32 бит делимого. Инструкция RDY
считывает значение регистра Y в регистр общего назначения; WRY
инструкция записывает значение регистра общего назначения в регистр Y. [17] : 32 SPARC V9 добавил MULX
, который умножает два 64-битных значения и выдает 64-битный результат, SDIVX
, который делит 64-битное знаковое делимое на 64-битный знаковый делитель и выдает 64-битное знаковое частное, и UDIVX
, который делит 64-битное беззнаковое делимое на 64-битный беззнаковый делитель и выдает 64-битное знаковое частное; ни одна из этих инструкций не использует регистр Y. [10] : 199
Условные переходы проверяют коды условий в регистре состояния , как это видно во многих наборах инструкций, таких как архитектура IBM System/360 и ее последователи, а также архитектура x86 . Это означает, что тест и переход обычно выполняются с помощью двух инструкций; первая — это инструкция ALU, которая устанавливает коды условий, за которой следует инструкция перехода, которая проверяет один из этих флагов. SPARC не имеет специализированных тестовых инструкций; тесты выполняются с использованием обычных инструкций ALU с назначением, установленным на %G0. Например, чтобы проверить, содержит ли регистр значение 10, а затем перейти к коду, который его обрабатывает, нужно:
subcc %L1,10,%G0 !вычесть 10 из %L1, устанавливая нулевой флаг, если %L1 равен 10быть WASEQUAL! если установлен нулевой флаг, перейти к адресу, отмеченному WASEQUAL
В инструкции условного перехода поле icc или fcc определяет проверяемое условие. 22-битное поле смещения — это адрес цели относительно текущего ПК словами, так что условные переходы могут идти вперед или назад до 8 мегабайт. Бит ANNUL (A) используется для избавления от некоторых слотов задержки. Если в условном переходе он равен 0, слот задержки выполняется как обычно. Если он равен 1, слот задержки выполняется только в том случае, если переход выполняется. Если он не выполняется, инструкция, следующая за условным переходом, пропускается.
Существует большое разнообразие условных переходов: BA
(переход всегда, по сути jmp), BN
(переход никогда), BE
(равно), BNE
(не равно), BL
(меньше), BLE
(меньше или равно), BLEU
(меньше или равно, без знака), BG
(больше), BGE
(больше или равно), BGU
(больше без знака), BPOS
(положительный), BNEG
(отрицательный), BCC
(очистка переноса), BCS
(перенос установлен), BVC
(очистка переполнения), BVS
(переполнение установлено). [17] : 119–120
FPU и CP имеют наборы кодов условий, отдельные от целочисленных кодов условий и друг от друга; два дополнительных набора инструкций ветвления были определены для проверки этих кодов условий. Добавление F в начало инструкции ветвления в списке выше выполняет проверку кодов условий FPU, [17] : 121–122 , тогда как в SPARC V8 добавление C проверяет флаги в иначе неопределенном CP. [17] : 123–124
Инструкция CALL
(перейти к подпрограмме) использует 30-битный программный счетчик - относительное смещение слова . Поскольку целевой адрес указывает начало слова, а не байта, 30 бит - это все, что нужно для достижения любого адреса в 4-гигабайтном адресном пространстве. [18] Инструкция CALL помещает адрес возврата в регистр R15, также известный как выходной регистр O7.
Инструкция JMPL
(переход и ссылка) — это инструкция с тремя операндами, два из которых представляют значения для целевого адреса, а один операнд — для регистра, в который помещается адрес возврата. Адрес создается путем сложения двух операндов адреса для получения 32-битного адреса. Второй операнд адреса может быть константой или регистром.
Поскольку код операции инструкции занимает некоторые биты 32-битного слова инструкции, нет способа загрузить 32-битную константу с помощью одной инструкции. Это важно, поскольку адреса обрабатываются через регистры, а они 32-битные. Чтобы облегчить это, специальная инструкция SETHI
копирует свой 22-битный непосредственный операнд в старшие 22 бита любого указанного регистра и устанавливает каждый из младших 10 бит в 0. В общем случае за SETHI следует инструкция or с только младшими 10 битами набора значений. Чтобы облегчить это, ассемблер включает макросы %hi(X)
and %lo(X)
. Например: [18]
sethi %hi(0x89ABCDEF),%L1 !устанавливает верхние 22 бита L1или %L1,%lo(0x89ABCDEF),%L1 !устанавливает нижние 10 бит L1 с помощью операции ИЛИ
Макросы hi и lo выполняются во время сборки, а не во время выполнения, поэтому это не влияет на производительность, но делает более понятным, что L1 установлен на одно значение, а не на два несвязанных. Чтобы сделать это еще проще, ассемблер также включает "синтетическую инструкцию", set
которая выполняет эти две операции в одной строке:
установить 0x89ABCDEF,% L1
Это выводит две инструкции выше, если значение больше 13 бит, в противном случае он выводит сингл ld
со значением. [18]
Как было отмечено ранее, ассемблер SPARC использует «синтетические инструкции» для облегчения общих задач кодирования. Дополнительные примеры включают (среди прочих): [18]
Intel была единственным производителем 80386 , что сделало его очень дорогим и заставило отрасль опасаться процессоров, поставляемых одним поставщиком . Когда Sun анонсировала SPARC в 1987 году, компания заявила, что он будет доступен из нескольких источников. Fujitsu была первым поставщиком SPARC, а Cypress Semiconductor была вторым лицензиатом; по состоянию на февраль 1989 года [обновлять]их процессоры SPARC были доступны, как и FPU Texas Instruments. [20] Следующие организации лицензировали архитектуру SPARC:
Примечания :
Машины SPARC обычно использовали SunOS , Solaris , JavaOS или OpenSolaris от Sun, включая производные illumos и OpenIndiana , но также использовались и другие операционные системы , такие как NeXTSTEP , RTEMS , FreeBSD , OpenBSD , NetBSD и Linux .
В 1993 году Intergraph анонсировала перенос Windows NT на архитектуру SPARC, [47] но позже проект был отменен.
В октябре 2015 года Oracle анонсировала «эталонную платформу Linux для SPARC». [48]
Существует несколько полностью открытых реализаций архитектуры SPARC:
Также существует полностью открытый симулятор для архитектуры SPARC:
Для высокопроизводительных вычислений компания Fujitsu создает специализированные процессоры SPARC64 fx с новым набором расширений инструкций, называемым HPC-ACE (High Performance Computing – Arithmetic Computational Extensions).
Компьютер Fujitsu K занял первое место в списках TOP500 за июнь 2011 и ноябрь 2011 года. Он объединяет 88 128 процессоров SPARC64 VIIIfx , каждый с восемью ядрами, что в общей сложности составляет 705 024 ядра — почти вдвое больше, чем любая другая система в TOP500 на тот момент. Компьютер K был мощнее, чем следующие пять систем в списке вместе взятые, и имел самое высокое отношение производительности к мощности среди всех суперкомпьютерных систем. [49] Он также занял 6 место в списке Green500 за июнь 2011 года с результатом 824,56 MFLOPS/W. [50] В выпуске TOP500 за ноябрь 2012 года компьютер K занял 3 место, используя наибольшую мощность из трех лучших. [51] Он занял 85 место в соответствующем выпуске Green500 . [52] Более новые процессоры HPC, IXfx и XIfx , были включены в последние суперкомпьютеры PRIMEHPC FX10 и FX100.
Tianhe-2 ( TOP500 № 1 по состоянию на ноябрь 2014 г. [53] ) имеет ряд узлов с процессорами Galaxy FT-1500 OpenSPARC, разработанными в Китае. Однако эти процессоры не внесли вклад в оценку LINPACK . [54] [55]
. DEP. #2-V8: Реализация архитектуры Oracle SPARC может содержать от 72 до 640 64-битных регистров R общего назначения. Это соответствует группировке регистров в MAXPGL + 1 наборов глобальных регистров R плюс кольцевой стек из N_REG_WINDOWS наборов по 16 регистров в каждом, известных как окна регистров. Количество имеющихся окон регистров (N_REG_WINDOWS) зависит от реализации и находится в диапазоне от 3 до 32 (включительно).
существуют четыре ситуации, когда оборудование не может успешно выполнить инструкцию с плавающей точкой: ... Инструкция не реализована оборудованием (например, ... инструкции с четверной точностью на любом SPARC FPU).
{{citation}}
: CS1 maint: неподходящий URL ( ссылка )