゜ビ゚トElbrusアヌキテクチャの抂芁

画像






「ロシアのバロりズ」から「アナログがない」たで、この蚘事の䞻題に぀いお倚くの掚枬が行われたす。 これは、アクセス可胜な完党なドキュメントの欠劂、それらを扱った人々の小さな茪、およびそれから経過したかなりの時間によっお、倧郚分が匕き起こされたす。 「゚ルブラス」は過ぎ去った時代の神話の䞀぀になりたした。



䞀方、コンピュヌタヌ耇合斜蚭は間違いなく存圚し、圓時ずしおは玠晎らしい結果を瀺したした。 おそらく、芁玠ベヌスが䞍足しおいるために、開発者はさたざたな皮類のアヌキテクチャヌの工倫を䜙儀なくされたした。 珟圚、これらのトリックの倚くは叀颚に芋え、いく぀かは非垞に関連性がありたす。



そこで、著者は固有の奜奇心から、利甚可胜なドキュメントを芋぀け出し、倚かれ少なかれ完党な図を䜜成しようずしたした。 読者が興味を持っおいるなら、猫ぞようこそ。



゚レメンタルベヌス



新䞖代の技術者は、新䞖代の技術者が成長したずきではなく、技術の質的な倉化に基づいお生たれたす。 ゜ビ゚トの「゚ルブラス」に関しお、そのような倉化は集積回路の出珟でした。 Elbrus-1の堎合、 TTLロゞックバルブあたり10〜15 nsの速床を備えた133シリヌズのチップでした。 「Elbrus-2」の堎合-ESLロゞックを備えた100番目のシリヌズ バルブあたり2 nsの速床。



100シリヌズは、 Motorolaの MECL 10K1971幎以降に基づいお䜜成されたした1974幎からの連続生産[6]。 133シリヌズ1969幎以降は、 TIの54シリヌズ1965幎以降[6]に基づいおいたす。 ぀たり 圓時、芁玠ベヌスに特別な遅れはありたせんでした。



メモリ構成



物理メモリ



メモリサブシステムは、 16Kビットの容量ず16384x1の線成を備えたK565RU3V  NMOP  マむクロ回路 [3]に基づいお構築されたした。



修正および制埡装眮を䜿甚するず、情報を読み取るずきに単䞀の゚ラヌを修正し、二重の゚ラヌを怜出できたす。 このために、8ビットのハミングコヌドが圢成され、蚘録䞭に72ビットの情報ワヌドに远加されたす。 したがっお、メモリに保存されるワヌドには、8-制埡情報タグ、64-デヌタ、8-ハミングコヌドの制埡ビットを含む80ビットが含たれたす。



アドレスバスの容量は24です。 物理メモリのサむズは16メガワヌド各72ビット、144 MBのデヌタずタグに制限されおいたす。



ハミングコヌドず合わせお蚈算するず、180 MBたたは90マむクロチップになりたす。 最倧の構成のために、これらすべおを8぀のキャビネットに配眮するこずができたしたセクションOP。



最倧構成には10個のプロセッサヌが含たれ、各プロセッサヌはOPの各セクションに接続されたす。 通信回線の長さは、耇合䜓のデバむスの配眮条件から玄10 mに遞択されたした。 この長さの光は、真空䞭で玄1 / 30,000,000秒33 nsで移動したす。 E-2では、信号は送信ステヌションの出力レゞスタから受信レゞスタに80 nsデュヌティサむクル44 nsで送信されたす。これは非垞に良奜です。



各メモリキャビネットOPセクションは、4぀のメモリモゞュヌルずスむッチで構成されおいたす。 モゞュヌルは機胜的に独立しおおり、異なるプロセッサヌず同時に情報を亀換できたす。 各モゞュヌルがハヌフメガワヌドの32個のモゞュヌルのみ。 グルヌプアクセスでは、4぀のモゞュヌルすべおが同時に起動されたす。 これにより、セクションOPでデヌタ亀換の最倧レヌトを取埗できたす。



モゞュヌルのサむクルは13クロックサむクルですが、同じグルヌプの異なるマむクロ回路ぞの連続した呌び出しは、7クロックサむクルごずに凊理できたす。



䞋䜍レベルでは、最小ブロックサむズは16Kワヌドで、16Kビットメモリチップのボリュヌムに察応したす。 ブロックは80ビットのメモリチップで構成され、1ビットに぀き1チップです。 したがっお、メモリモゞュヌルは32個のこのような最小ブロックで構成されたす。



RAM亀換デバむスUOOP



これはプロセッサの䞀郚です。 OPの8぀のセクションのそれぞれずは別個の通信チャネルがあり、単䞀の芁求ずグルヌプ芁求の䞡方で各セクションにアクセスできたす。



コヌルごずのグルヌプ芁求が4ワヌドの亀換である堎合。 メモリぞの曞き蟌みのアクセス時間はDSPの玄8クロックサむクルです。メモリからの読み取りのアクセス時間は玄20クロックですメモリモゞュヌルがビゞヌであるか、別のCPUの䜿甚ず競合する堎合、OPスむッチによっおアクセスを遅らせるこずができたす。



同時に、最倧3぀のリク゚ストをOEPに保存できたす。 UOOPには2぀のチャネルで内郚䞊列化があり、OPの異なるセクションに2぀の亀換芁求を同時に蚭定できたす。 チャネルの最倧シフト呚波数は、8クロックサむクルごずに1リク゚ストです。 したがっお、メモリぞのグルヌプ呌び出しでは、DEPは亀換レヌトを提䟛したす-サむクルごずに1ワヌド [1]。



順次アドレストラバヌサルのパフォヌマンスを最適化するために、むンタヌリヌブ技術が䜿甚されたす。 物理アドレスのビットの䞀郚が混圚しおいるため、䞊蚘のメモリ階局の異なるナニットに連続するワヌドが出珟し、䞊行しお読み取るこずができたす。 混合スキヌムは次のずおりです。



画像






個々のモゞュヌルが構成から陀倖されおいる堎合、オペレヌティングシステムはそれらのアドレスを割り圓おたせん。 スむッチがオフになっおいるモゞュヌルがあるため、このセクションで分割するこずはできたせん。



数孊仮想メモリ



数孊メモリは、倀の堎所が1ビットマシンワヌドに察しお正確に指定された堎合は32ビットアドレスである限り、38ビットの数孊アドレスで蚘述されたす。



数量



情報の基本単䜍は数量です。 倀は、数孊的なアドレスを䜿甚しおアドレス指定できる情報の論理単䜍です。 プログラムコマンドの実行䞭に数量が実行されたす。



倀の桁数圢匏のサむズは、1、4、8、16、32、64、128です。



128ビット以倖の倀は、耇数のワヌドに配眮するこずはできたせん。



1぀のワヌドに含めるこずができるタむプずフォヌマットは1぀だけです。ただし、1぀の䟋倖がありたす。敎数ず実際の32ビットフォヌマットは、1぀のワヌドに任意の順序でパックできたす。



単語情報の制埡桁には、単語の数量のタむプず圢匏が栌玍されたす。



Pages



数孊的蚘憶はペヌゞ分割されたす。 ペヌゞはさたざたなサむズ16の倍数-16〜1024ワヌドにするこずができたす。 ペヌゞの先頭のアドレスの䞋䜍10桁38桁はれロです[2 p。61]。



最初のワヌドの38ビットアドレスで、䞋䜍10ビットがれロになるように数孊メモリに配眮された16ワヌドのブロックは、ストリングず呌ばれたす。



セグメント



セグメントは、システムによっお割り圓おられた連続したアドレス指定の領域です。 数孊的メモリ内のセグメントの始たりは、ペヌゞの始たりず䞀臎したす。



セグメントを配眮するには、可胜な限り小さいサむズのペヌゞを䜿甚したす。 1024ワヌドを超えるセグメントは、隣接するペヌゞの数孊メモリに配眮されたすが、最埌のペヌゞを陀くすべおのペヌゞには最倧サむズが必芁です。



物理メモリ内のペヌゞの先頭、぀たりセグメントは、任意の物理行の先頭に配眮できたす。 ペヌゞは、物理メモリの隣接セルにありたす。



そのため、1024ワヌドを超えるセグメントは物理メモリに完党に存圚しない堎合がありスワップ、物理メモリ内のペヌゞは連続する必芁はありたせん。



仮想メモリのサポヌト。



仮想メモリは、かなり論理的で自然な方法で線成されおいたす。 タグシステムずメモリ保護の問題を考えるず、セグメントはOSカヌネルによっお䜜成されたすが、これは避けられたせん。



カヌネル内のすべおの空きメモリ領域は、空き領域の順序付きリストに結合されたす。 ゜ヌトは、゚リアのサむズによっお行われたす。 コマンドシステムには、特別に蚭蚈されたコマンド「LIST SEARCH」がありたす。これは、必芁なサむズに完党に䞀臎するか、必芁なサむズを最小限に超える領域を怜出したす。 最初の堎合、芋぀かった領域はリストから陀倖され、数孊メモリにロヌドされ必芁な堎合、この領域ぞのハンドルが手順の結果ずしお圢成されたす。 2番目のケヌスでは、芋぀かった領域のサむズが15ワヌドを超えお必芁なサむズを超えた堎合、必芁なサむズの領域が芋぀かった領域から取埗され、残りが空きメモリ領域に返されたす。空きメモリ領域では、空きメモリリストの察応する堎所に含たれたす。 ナヌザヌには、芁求されたサむズず正確に䞀臎するサむズのメモリ領域の蚘述子が䞎えられたす。



必芁なサむズのメモリがない堎合、小さいサむズの占有セクションを移動し、隣接する空き領域を䜿甚可胜な空き領域に分割するこずにより、空きメモリのセクションを統合しようずしたす。



これが目暙に぀ながらない堎合、占有領域の倖郚メディアぞのポンピングスワップが発生したす。 これは実行可胜セグメントには適甚されず、単に解攟するこずができたす...



各タスクには独自のポンプダりンファむルがあり、各セグメントはそのタスクを認識しおいたす。 ファむル内の空きメモリの分配は、ビットマスク[2、p。143]によっお実行されたす。1ビットはペヌゞに察応したす。 サむズが2 ** 32の数孊メモリの堎合、タスクごずに2 **32-16= 64Kのマスクが必芁です。これはそれほど小さくありたせん。さらに、可胜な最倧8Kより小さいペヌゞを凊理する方法は明確ではありたせん。䞀般的なポンプダりンファむルず比范しお、空きペヌゞのレゞストリの維持に関する問題を回避するこずができたす。 結局のずころ、各タスクには独自の数孊的蚘憶がありたす。 さらに、すべおのプロセスメモリの解攟がポンプダりンファむルの削陀に枛り、䜜業がファむルシステムに転送されたす。 タスクの数が比范的少ないため、これは玠晎らしいアプロヌチです。 その短所には、おそらくファむルシステムぞの远加の負荷が含たれたす。



OSのカヌネルには、バックグラりンドでタスクを「カット」するタスクがあり[2、p。143]、特定の割合のペヌゞをドロップしたす。 この堎合、パッシブタスクのデヌタは埐々にポンプダりンファむルに栌玍され、アクティブに動䜜するタスクのバランスが取られたす。



次に、アドレスの数孊的から物理ぞの倉換を調べおみたしょう。 タスクメモリのすべおの領域セグメントはリストで結合され、その先頭ず末尟はタスク蚘述子にありたす。 このアヌキテクチャでは、「C」の粟神でベアポむンタぞの参照はなく、ペアポむンタ、オフセットは垞に倉換されるこずに泚意しおください。



「リストによる怜玢」呜什を䜿甚したタスクセグメントの前述のリストには、セグメント蚘述子があり、その䞭に目的のペヌゞの物理アドレスがありたす。 このペヌゞが物理メモリにない堎合、スワップメカニズムがアクティブになりたす。



CPU内の物理アドレスぞの数孊アドレスの倉換を高速化するために、最も「アクティブな」ペヌゞに64芁玠の連想配列が提䟛されたす。 連想属性は数孊的なペヌゞの番号であり、答えはペヌゞの先頭の物理アドレス、そのサむズ、およびいく぀かのサヌビス機胜です。 この連想配列の怜玢時間は3サむクルで、凊理速床はサむクルごずに1぀のアプリケヌションです。



さらに、アクセスされおいる単語自䜓は、その数孊的なアドレスずずもに、単語の連想メモリに配眮されたす。これは各CPUにもありたす。 このようなメモリは、最新のメモリキャッシュに類䌌しおいたす。



ポンプアりトされたペヌゞたたはただ初期化されおいないペヌゞに関する情報を投皿するように蚭蚈された、ポンプアりトされたペヌゞのテヌブルTOCに぀いおの蚀及[2、p.144]がありたす。 このテヌブルの先頭はRAMにあり、オヌバヌフロヌ領域は倖郚メモリドラムにありたす。 その倀は、数孊的なメモリ党䜓ではなく、既存のペヌゞの数に比䟋したす。



TOCはシステムごずに1぀です。぀たり、ペヌゞごずにタスク識別子も芚えおおく必芁がありたす。



TOCの凊理を高速化するために、カヌネルにキャッシュが提䟛されおおり、非垞に効果的であるず䞻匵されおいたす。 しかし、これは奇劙です。効果的なキャッシングを行うには、メモリを䜿甚しおアプリケヌションタスクのロゞックを理解する必芁があり、OS開発者には䞍明です。



だから





デヌタ型



すでに述べたように、このワヌドは64ビットのデヌタず8぀の制埡ビットで構成されおいたす。 制埡ビットにはタグが含たれたす-単語の情報郚分にあるものの説明。



可胜性がありたす



  1. 32ビットず64ビットのフォヌマットは空です-通垞、これは初期化されおいないデヌタです。 ダミヌの読み取り、曞き蟌み、プロシヌゞャぞの転送、およびビットのチェックず倉曎も可胜です。 ただし、数倀たたは配列のいずれかを䜿甚しようずするず、割り蟌みが発生したす。
  2. 32および64ビット圢匏の敎数-珟圚普及しおいる圢匏ずは察照的に、ここでは文字が最䞊䜍ビットで匷調衚瀺されたす。
  3. 実数32-仮数蚘号/順序蚘号/ 6桁の順序/仮数24桁
  4. 実数64-仮数蚘号/順序蚘号/ 6桁の順序/仮数56桁
  5. 実数128-仮数蚘号/順序蚘号/ 6桁の順序/仮数56桁/䞊䜍桁-8桁/䞊䜍仮数桁-56桁。 䞀般に、数倀圢匏は珟圚のIEEE 754ずは異なりたす。360システムからも取埗されたす。
  6. ビット
  7. 数字-4桁、通垞は10進数を衚すために䜿甚されたす
  8. バむト-8ビット、通垞は文字列
  9. セット-64ビット、量ではなく同じタむプの芁玠のセットであり、それらぞの個々のアクセスは受け入れられたせんSIMD
  10. 蚘述子は64ビットで、メモリ領域の蚘述子はカヌネルによっおのみ䜜成され、数孊的なアドレス、芁玠のサむズ、芁玠のサむズビット、メモリ保護のタむプを含みたす。 蚘述子で蚘述される領域の最倧サむズは2 ** 20ワヌドです。
  11. むンデックス間接ワヌド-64ビット-これはE-1のサむクルカりンタヌです。

    珟圚のカりンタヌ倀、サむクルのステップ、および制限倀20桁すべお+笊号が含たれおいたす。

    算術挔算たたは配列の芁玠にアクセスする挔算では、自動的に党䜓に倉換されたす;ルヌプ挔算䞭、制限倀ず遷移の超過の自動チェック

    アドレスたたはカりンタヌの自動倉曎で。
  12. 間接ワヌドは蚘述子構造を持ち、そのような倀を読み取るず、アドレスで瀺される倀が自動的に読み取られるこずを特城ずしたす耇数回繰り返すこずができたす。
  13. 64ビットの間隔を䜿甚しお、むンデックス付き蚘述子で蚘述された領域からサブ領域の蚘述子を取埗したす。
  14. ゞャンプ操䜜のラベル。 GOTOコマンドでのみ䜿甚できたす。 -64ビット、含む

    • このラベルが蚘述されおいる囲みプロシヌゞャのコンテキストの数孊的アドレス。 -32のカテゎリヌ
    • 領域の先頭からのバむト数-16ビット
    • プログラムセグメント蚘述子-12ビット
    • プロシヌゞャの蟞曞匏レベルは5桁です0-システムコヌル、1および2-ナヌザヌプロシヌゞャ。3-最初の実行... [2、p。43]。
  15. 手順ラベル。 同じ構造を持ち、タグが異なり、プロシヌゞャを入力する操䜜でのみ䜿甚できたす。
  16. 技術ラベル。 同じ構造、異なるタグを持っおいたす。 読み取るずき、パラメヌタなしで自動的にプロシヌゞャに入り、単䞀の倀を返したす。
  17. セマフォは、システム内の同期の手段です。
  18. アレむの収穫。 Elbrusシステムでは、getmemやmalocなどのプロシヌゞャを明瀺的に呌び出すこずは䞀般的ではありたせん。

    代わりに、配列のいわゆる空癜がメモリに栌玍されたす-配列のサむズず配列芁玠のサむズを瀺す特別なタグを持぀単語。 アレむが䞍芁な堎合、ワヌクピヌスはそのたた残りたす。 そうしないず、そのようなワヌクピヌスを読み取るずきに割り蟌みが発生し、その凊理手順によっおメモリが割り圓おられ、遞択したアレむのハンドルがこのワヌクピヌスの堎所に曞き蟌たれたす。


コマンドシステムの機胜



  1. デヌタにタグが付けられたす。これにより、ハヌドりェアで保護され、たずえば、タグを考慮しお、タむプされた远加コマンドのファミリヌ党䜓を単䞀のファミリヌに眮き換えるなど、コマンドシステムを簡玠化できたす。



  2. アドレスのないコマンドシステムが採甚されおおり、その結果、レゞスタの割り圓おに関する䞍芁な情報はありたせん。 レゞスタの効率的な動的割り圓おは、ハヌドりェアによっお実装されたす。 アドレスなしのコマンド圢匏は、スタックのハヌドりェア実装に基づいおいたす。



  3. コマンド内のデヌタのアドレス指定は、数孊的なアドレスではなく、実行コンテキストを考慮したセグメント/むンデックスで行われたす。 たずえば、特定の手順甚に予玄されおいるスタック領域内のシヌケンス番号。



  4. 関数を呌び出すには、数孊的なアドレスに加えお、かなり詳现な蚘述子が䜿甚されたす。これは、ずりわけ、デヌタずパラメヌタヌのロヌカルスタックのサむズを瀺したす。 遅延デヌタ遞択が実装されたす。関数を入力するず、セグメント蚘述子のみが䜜成され、実際の遞択は最初の呌び出しで行われたす。 これは革新的な技術であるず報告されおいたす[2 p。42]。 実際、関数蚘述子番号は、コヌドの数孊的なアドレスず同様に、呌び出しの匕数です。 たずえば、x86では、コンパむラはプロロヌグず関数゚ピロヌグを配眮するこずにより、すべおのサポヌト䜜業を行いたす。


アドレスのないコヌド。



「 スタックレス」を意味する「 アドレスレス呜什システム」ず蚀いたす 。 匏x + y * z + uを評䟡する簡単な䟋を考えおみたしょう。



コンパむラがツリヌを解析するずき、次のようになりたす。

画像






この匏のアセンブラヌコヌドx86



mov eax,dword ptr [y] imul eax,dword ptr [z] mov ecx,dword ptr [x] add ecx,eax mov eax,ecx add eax,dword ptr [u]
      
      





仮想スタックマシンの堎合、擬䌌コヌドは次のずおりです。



  push x push y push z multiply add push u add
      
      





スタックを操䜜するには、次のタむプの操䜜が必芁です。





Elbrusのアヌキテクチャは䜕を提䟛したすか



  1. スタック読み蟌み操䜜。 情報は、コマンドストリヌムから盎接、たたはデヌタ領域からスタックにロヌドできたす。 最初のケヌスでは、ロヌドされた倀はコマンド自䜓に配眮され、2番目のケヌスでは、倀はコマンドたたはスタックの最䞊郚アドレスにロヌドに配眮されたアドレスにロヌドされたす。



    スタックはレゞスタからの埪環バッファずしお実装されおいるため、新しい芁玠をロヌドするず、スタックの䞀郚が自動的にメモリにアンロヌドされるこずに泚意しおください。



    特に興味深いのは、次のアドレスでのダりンロヌドです。



    • アドレスペアは数量の数孊的なアドレスです
    • 同時に、倀ぞのアクセスの可胜性がチェックされたす
    • 倀はスタックの䞀番䞊にロヌドされたす
    • その埌、ルヌプが実行されたす
      • タグは、ロヌドされた倀の倀のクラスをチェックしたす
      • 倀が倀クラスに属する堎合、操䜜は完了したす
      • 間接単語の堎合、間接単語による読み取りが発生したす
      • 手順ラベル、それはかなりの意味、サむクルが停止したす
      • これがプロシヌゞャの技術ラベルである堎合、プロシヌゞャが呌び出され、その結果がスタックの䞀番䞊に残されたす。




  2. スタックからメモリぞの曞き蟌み。 これを行うには、スタックの最䞊郚からの2぀の倀、レコヌドの倀ずアドレスが必芁です。 レコヌドのアドレスは、アドレスペアたたは間接ワヌドのいずれかです。 録音は「ワンステップ」、぀たり録音アドレスで盎接行われたす。



  3. 算術挔算 、関係挔算、および論理挔算。 算術挔算は、スタックの最䞊郚に含たれる1぀たたは2぀の倀に察しお実行されたす。 原則ずしお、オペランドは敎数たたは実数です。さらに、オペランドがさたざたなタむプ敎数ず実数の堎合、挔算は敎数を実数に自動的に倉換したす。 オペランドの圢匏が異なる堎合、操䜜の前に自動的に「長さの敎列」が最倧長になりたす。



    元の数倀がスタックから削陀され察応するポむンタヌオフセットを䜿甚、結果がスタックの最䞊郚に配眮されたす。



    単䞀の算術挔算は、スタックの最䞊郚からオペランドを取埗し、結果で眮き換えたす。



䞭倮凊理装眮



画像

CPU [1]のブロック図





デコヌド



プログラムコヌドは呜什バッファBCに読み蟌たれたす。 BCは連想配列ずしお機胜し、512ワヌドのボリュヌムを持ち、32の等しいセグメントに分割されたす。 RAMからBCぞの情報のポンプは、4ワヌドのブロックで実行されたす。 スワップレヌトは、呜什バッファ内のコマンドワヌドの必芁なマヌゞンによっお決定され、呜什のデコヌドレヌトが倉曎されるず自動的に調敎されたす。



サンプリングスキヌムは、BCから次のコマンドを抜出し、解読し、内郚レゞスタ圢匏に倉換するために制埡ナニットに転送したす。



内郚アドレス指定システム



アドレスおよび数倀情報のすべおの転送には、CPUで情報の゜ヌスたたはコンシュヌマの内郚アドレスが䌎いたす。 内郚アドレスは、呜什バッファ、オペランドスタックSTOP、BP、およびDUTの䞀郚の入力レゞスタに割り圓おられたす。



STOPは、32個のレゞスタず32ビットレゞスタビットマスクで構成されたす。 このマスクの各ビットは、特定のレゞスタを担圓したす。1-䜿甚䞭、0-空きを意味したす。



IUにコマンドが発行されるず、オペランドの内郚アドレスず挔算結果が圢成されたす。 スタック操䜜の堎合、オペランドず結果はSTOPからのレゞスタ番号です。



たずえば、加算コマンドをデコヌドするには、オペランド番号がすでに早く受信されおいるず芋なされ、STOPからの任意の空きレゞスタを割り圓おるこずができたす。 コマンドの実行埌、オペランドは解攟されたす。



実行



デコヌドの盎埌にすべおの呜什を実行できるわけではないため、デコヌドされたが実行されおいない呜什のバッファが必芁です。 CPUには、内郚衚珟で32呜什のバッファがありたす。



デコヌダヌから、プログラムで指定された順序でコマンドが発行されたす。 さらに、それらには順番に番号が付けられおおり、この番号はチヌムの生涯にわたっお付きたす。 この数は、デコヌドされた呜什の前述のバッファ内のむンデックスであり、32に達するず、れロから再び始たりたす。 珟圚の倀がわかれば、キュヌ内のすべおのコマンドをデコヌド順に䞊べるこずができたす。



DUTでのコマンドの実行時間は、そのタむプによっお決たり、単粟床のオペランドの操䜜では2〜20クロックサむクル32、倍粟床のオペランドでは最倧30クロックサむクル64の範囲です。 ??? 乗算F64-4぀のメゞャヌ。 郚門F64-24メゞャヌ。



F128圢匏の実数で挔算を実行するには、3桁の加算が必芁です-最䞋䜍桁の加算、䞋䜍桁からの転送を考慮した䞊䜍桁の加算、䞊䜍桁からの転送を考慮した䞋䜍桁の繰り返し加算。 これには、䞭間結果を保存する必芁がありたす。



匕数の準備ができ、目的のアクチュ゚ヌタが利甚可胜になるず、コマンドの実行が開始されたす。 なぜなら 実行順序は必ずしも元の順序ず䞀臎するわけではなく、異垞な実行 OoO がありたす。 たた、耇数の゚グれクティブナニットがあり、それらが䞊行しお動䜜するため、 スヌパヌスカラヌが顕著です。 確かに、加算噚、陀算噚、および乗算噚は単䞀のコピヌですが、䞊行しお動䜜できたす。



合蚈で10個のアクチュ゚ヌタがあるため、サむクルごずに実行できる呜什の数が問題になりたす。 [2 p。185]では、コマンドのシヌケンシャルな実行を䌎う技術モヌドでは、生産性が2〜3倍䜎䞋するこずが述べられおいたす。 [4]では、サむクルごずに玄2チヌムず蚀われおいたす。 これは、明らかに、サむクルごずに2぀のレコヌドのみを蚱可するSTOPの実装によるものです。



䟋


完党にスヌパヌスカラヌの動䜜の可胜性を瀺すために、匏「a * b+c / d」を分析したす。 この堎合、倉数「a」ず「c」はプロシヌゞャのロヌカル倉数の領域に配眮されおキャッシュに存圚したすが、「b」ず「d」はグロヌバルでキャッシュにありたせん。 簡単にするために、それらはすべおタむプF64です。



アセンブラコヌドは次のようになりたす。



     b ∗  c  d ⁄ +
      
      





OTは「倀の呌び出し」を意味し、DTZは「長いOT」を意味し、算術挔算のニヌモニックは䞍明です。



デコヌド埌、内郚衚珟のコヌドはおよそ次のようになりたすニヌモニックが発明されたした。



  a -> R1 ;   R1    b -> R2 ;   R2   ∗ R1 R2 ->R3 ;   R2  , R1 & R2      -> R4 ;   R4    d -> R5 ;   R5   ⁄ R4 R5 ->R6 ;   R6  , R4 & R5    + R3 R6 ->R1 ;     R1  , ; R3 & R6    ;   R1
      
      





チヌム間の䟝存関係により、実行は次の順序で発生したすサむクルあたり2呜什、キャッシュからの読み蟌み-1サむクル、メモリからの読み蟌み13サむクル、「*」-4サむクル、「/」-24サむクル、「+」-3サむクル

タクト 開始する 終わった
1 ザグa-> R1; ザグb-> R2
2 -> R4でダりンロヌド; ザグd-> R5 ザグa-> R1
3 ダりンロヌド-> R4
13 ザグb-> R2
14 ∗ R1 R2-> R3 ダりンロヌド-> R4
15 ⁄ R4 R5-> R6
17 ∗ R1 R2-> R3
38 ⁄ R4 R5-> R6
38 + R3 R6-> R1
40 + R3 R6-> R1


乗算ず陀算は非垞に䞊行しお実行されたす。 残念ながら、挔算アクチュ゚ヌタにはパむプラむンがありたせん。パむプラむンは、ベクトルプロセッサでのみ蚈画されおいたした[2、p。150]。



実行を停止しお続行する



たずえば、タむムスラむスの有効期限が切れた堎合など、必芁に応じお続行できるようにプログラムを䞀時停止するこずが必芁になる堎合がありたす。 これには、呜什の元の順序を埩元する必芁がありたす。 この堎合



  1. 䞭断の原因ずなったコマンドの番号が蚘憶されたす
  2. それより前に解読されたコマンドは完了し、埌で解読されたコマンドの実行はキャンセルされたす
  3. レゞスタは、割り蟌みの原因ずなった呜什のデコヌドに察応する瞬間に埩元されたす
  4. 割り蟌みに入る


レゞスタの状態を埩元するには、サむズ2 *「ティックの最倧呜什長」のレゞスタ倀の倉曎のログ甚の埪環バッファなど、特別なメカニズムが必芁です。 呜什の最埌に、これらはこのログに曞き蟌たれたす-STOPからの叀いレゞスタ倀、新しい倀、レゞスタ番号、およびコマンド番号。 その埌、必芁に応じお、キャンセルされたコマンドの倉曎を取り消すこずができたす。



コマンド実行のキャンセルは、条件分岐呜什を凊理するずきにも䜿甚されたす。 このようにしお、 投機的なコヌド実行が実装されたす。

分岐予枬子に関する蚀及はありたすが[1]、メカニズムは䞍明です。



では、䜕がありたすか





マルチプロセッサ䜜業



プロセッサ間通信の問題は、各プロセッサが独自のRAMキャッシュを持っおいるため、RAMずRAMのデヌタが䞀臎するこずに関連しおいたす。 RAMを䜿甚するず、比范的䜎速のメモリぞのアクセス頻床を倧幅に削枛できたすが、メモリ内のデヌタがRAM内のデヌタよりも新しい可胜性がありたす。



MVK「Elbrus」では、タスクは、共通の数孊的メモリを共有する耇数のプロセススレッドを生成できたす。 耇数のプロセスに共通のデヌタを䜿甚読み取りたたは倉曎するプログラムセクションは、クリティカルセクションず呌ばれたす。



同期ずキャッシュ䞀貫性のサポヌトずいう2぀の問題がありたす。



セマフォ 




メモリの䞀貫性


䞀般デヌタの凊理は、クリティカルセクション、぀たり「CLOSE」操䜜ず「OPEN」操䜜の間、たたは「ZHUZH」操䜜ず「OTKSEM」操䜜の間でのみ実行できるず考えられおいたす。



これらの操䜜の間にプロセッサRAMに蚘録されたすべおのデヌタは「䞀般」ずしおマヌクされ、さ​​らに、RAMに入力された時間が保存されたす。 RAMずは、1024ワヌドのボリュヌムを持぀グロヌバルデヌタのメモリを意味したす[2 p。186]。



各プロシヌゞャには独自のロヌカルアドレス空間があり、グロヌバルデヌタはプロシヌゞャのスコヌプが蚱す限り他のプロシヌゞャに属したす。 ぀たり コンパむラずプロセッサの堎合、ロヌカルデヌタずグロヌバルデヌタの呌び出しは同等ではありたせん。



セマフォを開くず、オヌプン時間が蚘録されたす。 セマフォが閉じられるたびに、セマフォに蚘録された時間ず、RAMに䞀般デヌタを曞き蟌むのにかかった時間が分析されたす。 このセマフォを開く前にRAMに入力された䞀般デヌタは、別のCPUによっお倉曎された可胜性があるため、信頌性が䜎くなりたした。 セマフォを開いた埌にRAMに取り蟌たれたデヌタは、このセマフォに関連しおいないため、信頌できたす。



䟋を芋おみたしょう。 スレッドセヌフカりンタヌに぀いお話しおいるずしたす。



  1. ストリヌム1は、T-1の時点でCPU-1のセマフォ1をキャプチャしたす゚ルブラスで閉じたす。
  2. スレッド1は、グロヌバルキャッシュにないカりンタ1を読み取りたす
  3. スレッド2はセマフォ1をキャプチャしようずしおブロックしたす
  4. counter-1は、T-2時間でグロヌバルCPU-1キャッシュに衚瀺されるようになりたした
  5. スレッド-1は、カりンタT-1をむンクリメントし、時間T-3でCPU-1のグロヌバルキャッシュに曞き蟌みたす
  6. スレッド1は、T-4の時間でセマフォ1を解攟したすElbrusで開きたす。 この時点で、セマフォ1のキャプチャ時間内にカりンタ1の倉化が怜出され、この倀がメモリに曞き蟌たれたす。
  7. スレッド2は、キャプチャされた閉じられたセマフォ1を持぀CPU-2のT-5の時点で起動したした
  8. スレッド2は、カりンタ0の倀を読み取ろうずしたす。カりンタ1は、T-0タむムスタンプでグロヌバルCPU-2キャッシュに既に存圚したす。 なぜなら T-0はT-5未満で、倀は無効ず芋なされ、メモリから読み取られたす。
  9. スレッド2は、T-6の時間でセマフォ1を解攟したすElbrusで開きたす。 䜕も倉わっおいないので、䜕も起こりたせん


したがっお、セマフォのオヌプン時間ず䞀般デヌタをRAMに入力する時間の比范に基づいお、CPUはデヌタの信頌性の問題を独自に解決したす。 同時に、グロヌバルキャッシュ党䜓をフラッシュする必芁はありたせん。フラッシュするず、パフォヌマンスが䜎䞋したす。



これをすべお提䟛するために、プロセッサ間通信甚に次の手順が導入されたした。





どうやら、これはセマフォの状態の倉化に関する情報の配垃方法です。



たた、この方法では、セマフォを閉じずにハヌドりェアによっおRAMに入力されるデヌタを配垃する必芁があるず想定されおいたす。 これには、プログラムセグメントの蚘述子ず、数孊および物理アドレスの察応衚が含たれたす。



同様に、セマフォが他のプロセッサのRAMに察しお閉じられたずきに、RAMに倉曎を配信する問題を解決できたす解決したす。



関数呌び出し



関数呌び出しパラメヌタヌずロヌカル倉数はスタック䞊にありたす。 呌び出しコンテキストもスタック䞊にありたす。 本質的に、コンテキストは2぀のポむンタヌで構成されたす-叀いコンテキスト぀たり、コンテキストはリストによっお機胜を終了するためにリンクされたすず呌び出しが行われた呜什ぞのリンクです。 さらに远加情報があり、これらはすべお2語でパッケヌゞ化されおいたす。



しかし、Elbrusの関数呌び出しは独特です。 倚盞です。



  1. たず、将来の呌び出しのコンテキストを䜜成しお、スタックの䞀番䞊に配眮する必芁がありたすスタックマヌキング
  2. 呌び出しパラメヌタヌを蚈算したす。呌び出しパラメヌタヌは、スタックの最䞊郚に目的の順序で衚瀺されたす。 したがっお、パラメヌタはコンテキストの埌に配眮され、䞀般的なハヌドりェア保護メカニズムを䜿甚しおロヌカルデヌタ゚リア蚘述子からアクセスできたす。
  3. ロヌカルデヌタ甚にメモリが割り圓おられたすサむズはコンパむラによっお決定されたす。 これで、関数の実行を開始できたす。


終了する堎合、必芁に応じお、関数は以前のコンテキストの代わりに戻り倀を残したす。



なぜそのような困難なのですか1぀の呜什でより䌝統的に関数を呌び出しおみたせんか



この堎合、関数のパラメヌタヌはコンテキストの前にあり、このコンテキストで始たるロヌカルデヌタ領域ぞのハンドルはそれらをカバヌできたせん。蚘述子の初期領域をパラメヌタ領域の先頭に戻すず、コヌルスタックのリストが砎損するか、たたはスタックに擬䌌パラメヌタパラメヌタ領域の長さを曞き蟌む必芁がありたす。実際には同じスタックラベル付けずは䜕ですか。



前述のロヌカルデヌタにアクセスするための蚘述子に぀いおは、1぀ではなく、既に32個ありたすが、どちらを䜿甚するかは、関数の蟞曞線集レベルによっお決たりたす。



プロシヌゞャの蟞曞匏レベル。



このメカニズムは、x86特暩レベルに倚少䌌おいたす。スタック䞊のロヌカルプロシヌゞャデヌタ+パラメヌタヌを蚘述する32個のベヌス蚘述子レゞスタがありたす。



それぞれ通垞の゚リア蚘述子ずしおに含たれるもの



  1. 32〜38桁-蚘述された領域の先頭の数孊的なアドレス「MANACH」
  2. 13〜18桁-最倧むンデックスたたはサむズ「INDMAX」
  3. 3桁-蚘述子ステップ2 ** nビットn = 0,1,2、...、7「STEP」
  4. 4桁-アクセスモヌドに関する情報「保護」


異なるベヌスレゞスタは、異なるスタックコンテキストを蚘述したす。したがっお、レゞスタ0には、プロシヌゞャの蚘述子ずオペレヌティングシステムのデヌタのスタックを蚘述する蚘述子が含たれ、レゞスタ1ず2は、プロシヌゞャの蚘述子のスタックず実行するタスクの倖郚名を蚘述し、レゞスタ3には最䞊䜍ブロックのスタックを蚘述する蚘述子などが含たれたす。



したがっお、ある呜什呜什に量の゚ンコヌドされた「名前」物理的にスタックにあるが含たれおいる堎合、このコンテキストでのみ定矩されたす。スタック芁玠ぞのアクセスは、関数の蟞曞匏レベル、およびこの関数のデヌタアドレスペアに割り圓おられたスタック領域内のワヌドのシリアル番号を介しお行われたす。



FORTRAN、COBOL、LISP、APL-ブロック構造を持たない蚀語



このような蚀語の手順では、ロヌカル倉数ず呌び出しパラメヌタヌのみが䜿甚可胜です。呌び出された各プロシヌゞャのメモリ割り圓おは動的に実行されたす。プロシヌゞャに入るず、仮パラメヌタずロヌカル倉数に必芁な空きメモリ領域がスタックに割り圓おられ、スタックポむンタCSSが新しい境界に移動したす。



プロシヌゞャに割り圓おられたメモリ領域は、ベヌスレゞスタの1぀let Nに配眮された蚘述子によっお蚘述されたす。この領域では、アドレスペアN、Iを䜿甚しお倀にアクセスしたす。



新しい境界より䞋のスタック䞊の空きメモリの領域は、䞭間結果を栌玍するために䜿甚されたす。



プロシヌゞャを終了するず、割り圓おられたメモリ領域は、以前のCSSを埩元しお空きメモリ領域に戻りたす。したがっお、各プロシヌゞャには、実行のダむナミクスに必芁なだけのメモリが、必芁な堎合にのみ割り圓おられたす。



考慮された手順Pから別の手順Qが呌び出されるず、手順Pずたったく同じ方法で手順Qに空きメモリ領域が割り圓おられたす。さらに、手順Pで説明されおいる倉数ずその䞭間結果はスタックに残り、プロシヌゞャQからの戻りが発生したずきに再利甚されたす。



Qプロシヌゞャを終了するずきは、ベヌスレゞスタの内容を番号Nで埩元し、Qプロシヌゞャコヌルのオペレヌタに続くオペレヌタに制埡を移す必芁がありたす。 





プロシヌゞャヌQを呌び出すずき、次の䞀連の操䜜が受け入れられたす。



  1. 手続きQのラベルはスタックにロヌドされたす。぀たり、手続きQぞの入力が数孊メモリのどこにあるかに関する情報です。
  2. 「MS」コマンドが実行されたす-スタックをマヌクしたす。 この堎合



    1. 空きセルがスタックの䞀番䞊に割り圓おられ、呌び出されたプロシヌゞャQのSPMブランクがその䞭に配眮されたす。
    2. SPMブランクの「ΔADDRESSES」フィヌルドには、このSPMのアドレスずUMCスタックマヌカヌポむンタヌず呌ばれる補助レゞスタヌの内容ずの差が蚘録され、いわゆるダむナミックチェヌンが圢成されたす。ラベルアドレスはUMCに曞き蟌たれたす。このレゞスタは、パラメヌタを枡すずきの特別な期間にのみ必芁です。
    3. その埌に、実際のパラメヌタヌに関する情報を順次スタックにロヌドするコマンドが続きたす。
  3. 「INPUT」コマンドが実行されたす。


この堎合、「RETURN」コマンドで手順を終了したす。



  1. () , , 0
  2. (“”) ,
  3. , “Δ ” ( ) “” , , () .
  4. , . “” , Nk — , .


60, /1, , 68 —



開発者は、ブロックがパラメヌタのないプロシヌゞャの特殊なケヌスであるずいう芳点を採甚したした。この堎合、蚘述ず呌び出しはプログラム内の同じ堎所にありたす。



したがっお、ブロックぞの各゚ントリには、スタックの最䞊郚に2぀の単語ISSSPMずプロシヌゞャコヌルの暡倣が導入されおいたす。パラメヌタがないため、すべおがすぐに実行されたす。ブロックの堎合、スタック䞊のロヌカル倉数に領域が割り圓おられ、この領域ずコンテキスト付きの前の2ワヌドにハンドルが䜜成されたす。



ただし、ブロックは、同じ関数の䞊䜍ブロックの倉数を䜿甚できるずいう点で、本栌的な関数ずは異なりたす。これを提䟛するには



この問題は、蚘述子のスタックを敎理するこずで解決したした。思い出すず、32個の蚘述子があり、そのうちの最初の3個は予玄されおいたす。残りはスタックずしお䜿甚されたす。぀たりブロックに入るず、珟圚の蟞曞匏レベルを䞊げたすこれにはレベルレゞスタがありたす。ブロックを出るず、レベルを䞋げたす。合蚈、ネストブロックの最倧可胜レベル-単なる人間の30からオペレヌティングシステムの32たで。



ここで問題が発生したす-ブロックツリヌで関数QのネストレベルNを持぀ブロックから関数Pを呌び出したしょう。䜕も実行されない堎合、ベヌスレゞスタ内のブロック蚘述子が䞊曞きされ、Pからの戻りが動䜜䞍胜状態で発生したす。



ベヌスレゞスタの内容を保存できる自然な堎所は、スタック䞊のブロックのコンテキストです。実際、䜕も保存する必芁さえありたせん。戻ったずきにベヌスレゞスタの内容を再䜜成できたす



  1. 前の関数のISSアドレスです。これを行うには、蟞曞リストレゞスタレベルの以前の倀に察応する回数だけISSリストをさかのがるだけで十分です。
  2. 以前の蟞曞匏レベルの倀は、最も近いISSの「LL」フィヌルドで取埗できたす。
  3. 衚瀺されるすべおのSPMの「BASE」フィヌルドは同じで、目的の機胜のアドレスを瀺す必芁がありたす。これは、ISSリストの通過を停止するための別の基準です
  4. 珟圚のISSに基づいおリストを調べるプロセスで、フィヌルド番号LLで蚘述子を曞き換えたす


ブロック蚀語のサポヌトはかなり面倒に芋えたす。さらに、基本レゞスタのメカニズムには二重の性質がありたす。䞀方で、オペレヌティングシステム、ラむブラリ、および最終プログラムを区別するためのメカニズムです。䞀方、ブロック蚘述子のスタック。なぜこれが起こったのですか



ハヌドりェアメモリ保護のため。各ブロックには独自の蚘述子があり、ブロックのスタックは蚘述子のスタックに察応したす。



なぜ関数党䜓に察しお単䞀の蚘述子でできないのですかどうやら、関数の入り口で最悪の堎合にロヌカルメモリを割り圓おる必芁があるためです。



䟋



 procedure p; begin integer i; ... begin integer array s [1:1000]; ... end ... end
      
      





内郚ブロックがめったにアクセスされない堎合でも、Pが呌び出されるたびにロヌカル倉数に実際に必芁な1぀のメモリではなく、1001個の敎数にメモリを割り圓おる必芁がありたす。メモリが非垞に高䟡なリ゜ヌスである状況では、これは重芁な議論です。



しかし、ISS関数からスタックの最埌たで関数の蚘述子を䜜成しおみたせんか実際には、ハヌドりェアのメモリ保護が拒吊されるためです50:)。さらに、スタックセグメントがオヌバヌフロヌ䞭に拡匵する可胜性があるたたは拡匵できるように蚈画されおいた堎合は、単に終了したせん。



公平を期しお、最新の「Elbrus」は、セキュリティ情報のために、返品情報を保存するための2番目のハヌドりェアスタックを実装したした[9]。このメカニズムにより、䞊蚘の保護がより゚レガントに実珟されたす。確かに、珟代の「゚ルブラス」は、この蚘事の䞻題ずほずんど共通点がありたせん。



合蚈



それで終わりたした。同時に、゚ルブルスの䞻芁な建築的特城が考慮されたした。著者は、呚蟺機噚、ファむルシステムデバむスの操䜜など、いく぀かの偎面に意図的に觊れたせんでした。過去の期間にわたっお、すべおが非垞に倉化しおおり著者の芳点から、ほが考叀孊的な芳点から興味深い-「どうしお、圌らはどうやっお出たのか」



そしお、ここでは、耇合䜓に組み蟌たれた建築的アむデアのいく぀かは、今日たでその関連性を倱っおいたせん。たずえば、タグシステムは珟代の「゚ルブラス」に䜏んでいたす。スヌパヌスカラスタックプロセッサのアむデアが残念抂念的には少なくずも著者の意芋では、スヌパヌスカラヌアヌキテクチャたたは明らかな䞊列性を備えたアヌキテクチャを登録するずいう考えよりも調和がずれ、シンプルですが、根付きたせんでした。



いずれにせよ、登堎圓時の「゚ルブラス」は間違いなく進歩の最前線にあり、そのクリ゚ヌタヌは、もちろん䞖界の経隓に頌り、独自のアむデアを提案し、実装しお未来ぞの道を切り開いおきたした。



䜜成者は、パむプラむン化されたベクトルコプロセッサ存圚し、80 Mflops [2、p。166]の実際のパフォヌマンスを瀺したの䜿甚を含む、耇雑な[2、p。201]のさらなる開発を芋たした。



゜ヌス



[1] Masich G.F. 講矩

[2] V. S. Burtsevプロゞェクトマネヌゞャヌ、ハヌドりェア担圓チヌフによる蚘事のコレクション

[3] Elbrusに関するWIKI蚘事

[4] www.osp.ru/os/2009/02/7314081

[5] www.ixbt.com/ cpu / e2k-spec.html

[6] はPogoriliy

[7] www.pvsm.ru/programmirovanie/106969

[8] www.caesarion.ru/warrax/w/warrax.net/88/elbrus.html

[ 9] www.mcst.ru/files/511cea/886487/1a8f40/000000/book_elbrus.pdf




UPD゚ラヌ、説明、コメントを修正しおくれたwasya habrovchaninに感謝したす。



All Articles