Т.Б.>>> А что со SPARCом не так? Вроде не самая экзотичная из тех, что видел свет...
Sandro>> С многозадачностью у него не так. При переключении задач надо же в память сохранять весь этот его хвалёный стек регистров и загружать новый. И при превышении глубины стека тоже надо сохранять.
Т.Б.> Хм...
Т.Б.> Я, конечно, может и путаю чего - не писал на этом ассме, но сколько там того регистрового файла сохранять надо? 32 регистра (меньше, с учетом глобальных и перекрытия регистров) и помножить на глубину, на которую занырнули в вызовах. Или там весь регистровый файл всегда на стек клался?
У SPARC регистровый файл и стек — это одно и то же. При переключении задачи надо выгружать в память весь активный регистровый файл. До 196 регистров ЕМНИМС.
И грузить регистровый файл новой задачи. Это ужас.
Интеловцам потребовалось три десятка лет, чтобы отобрать пальму первенства посредством AVX-512. Два килобайта регистров, блин. Больше только у GPU бывает, но у них в принципе нет сохранения контекста задачи. Соответственно, и проблемы нет.
Sandro>> И особо хочу заметить, что вызов ОС — это тоже переключение задачи. Блин, что, операционку нельзя вызывать кроме случаев крайней необходимости? Или пусть всё тормозит?
Т.Б.> Конечно, когда у х86 было 8 регистров примерно, то разница велика, но это скорее попытка выдать нужду за добродетель.
А кто выдаёт? x86 исходно был "затычкой для дырок в печатной плате и бизнес-планов". Кто же мог знать, что iAPX432 окажется мертворожденным, а творчески мыслящие молодые специалисты из IBM заткнут этой затычкой побочную ветку исследований по разработке персональго компьютера?
То, что 8 регистров мало — было понятно уже тогда.
Т.Б.> Этих 8 регистров толком никогда ни на что не хватало, когда ручками. Я как-то ABI для PPC PReP смотрел ради интереса, так там для сисколов буквально 2-3 регистра надо сохранять, остальные - на вызываемой стороне и по мере надобности. Не было ли и у Sun такого?
Там вообще ничего не нужно сохранять, пока регистровый файл не кончится. Потому что стек и регистры — это одно и то же. Ты просто сдвигаешь окно адресуемых регистров по стеку. Вот цитата из SPARC ABI:
6.2 Register Usage
The input registers %i0 through %i7, and the local registers %l0 through %l7 are callee saves registers.In other words, to use them in an assembly function called from C code, they should be saved first and restored before returning. These registers are normally saved in the callee by executing a save instruction to change the register windows, and restored with the restore instruction or the return instruction at the end of the function. If you use the input or local registers within an assembly language function and call a C function, there is no need to save those registers before the call.
The output registers %o0 to %o7 are caller saves registers and are also used for parameter passing and return values. To use the output registers in an assembly language function, there is no need to save them before using them. If calling a C function from assembly language, any useful value in an output register should be saved before the call is made.
The global registers %g0-%g7 are more complicated. The %g0 register is always zero. The %g6 and %g7 are always reserved for the operating system, so assembly code should not modify them. The other global registers, %g1-%g5, are caller saves, and are usable by applications code. But note that %g1 and %g5 may be used in the program linkage table (PLT) or other interposition code, and thus cannot be used to pass parameters from caller to callee.
Всё "сохранение" — это сдвиг регистрового окна.
Кстати, Итанику привет, у него та же фигня.
Sandro>> Лучше бы на эту же площадь кристалла кэш поместили, полезнее было бы.
Т.Б.> Смотря для чего. Если софт с чем-то типа больших таблиц реляционных работает, то не очень-то и кеш поможет
Для кода и верхушки стека — очень даже поможет. Плюс кэш условных переходов (BPB) реально помогает. Причём все они не обязаны быть большими, 512 строк уже вполне неплохая величина.
Т.Б.> А вот у Эльбруса... МЦСТ, короче говоря, с регистрами еще дальше пошло, чем Sun в свое время. Выйдет из этого толк или нет - неизвестно, но возня с громадным RF их особо не смущает судя по всему
Если речь про E2K, то, судя по доступной документации, это в общем-то DSP, замаскированный под универсальный процессор. Как BlackFin, только DSP ядро явно с сделано с оглядкой на машины Сеймура Крея.
Сомнительная идея IMHO. На нынешнем технологическом уровне числодробилки лучше делать как в GPU. Иначе упрёшься в шину памяти.