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