# ハードウェアトポロジ抽象化 ## 定義 ハードウェアトポロジ抽象化とは、プロセッサソケット・コア・キャッシュ・NUMAメモリノードなど、機械が持つ計算・記憶資源の物理的な階層構造(トポロジ)を、OS・ハードウェアベンダに依存しない共通のデータ構造(典型的には木構造)としてアプリケーションやランタイムシステムに公開する手法である。目的は、タスクやメモリ割り当てをこの階層構造に整合させる「アフィニティを意識した配置」を、個別OS APIの違いを吸収した移植可能なコードで実現できるようにすることにある。(Source: [[@2010__PDP__hwloc a Generic Framework for Managing Hardware Affinities in HPC Applications]] §III) ## 横断的知見 - **同じトポロジ収集を土台にしても、「抽象化データをどう表現・可視化するか」は別の設計判断であり、hwloc論文とMemAxes論文は互いに補完的な貢献をしている**: hwloc論文([[@2010__PDP__hwloc a Generic Framework for Managing Hardware Affinities in HPC Applications]] §III)は、ハードウェアトポロジを「オブジェクト型・相対深さに仮定を置かない」汎用木構造として収集・API公開する設計に焦点を当て、可視化についてはツール`lstopo`による簡易な図示に留まる。一方[[@2018__TVCG__MemAxes - Visualization and Analytics for Characterizing Complex Memory Performance Behaviors]]は、hwlocが提供するトポロジ収集機構をそのまま利用しつつ、その可視化面(hwloc/likwidが用いる水平icicle plot)が持つ「上位階層に過剰な視覚領域を割き下位階層の表示数が視野幅で制限される」という視覚的スケーラビリティの欠点を指摘し、放射状(sunburst型)レイアウトによる代替を提案する。両論文を並べると、「ハードウェアトポロジ抽象化」という主題は(1)収集・データモデルの抽象化と(2)可視化レイアウトの設計という独立した2つの課題に分解でき、hwlocは前者を、MemAxesは後者を主眼に置いていることが分かる。(Source: [[@2010__PDP__hwloc a Generic Framework for Managing Hardware Affinities in HPC Applications]] §III, [[@2018__TVCG__MemAxes - Visualization and Analytics for Characterizing Complex Memory Performance Behaviors]] §6.2) - **MemAxesが批判する「icicle plotの視覚的スケーラビリティの欠点」は、hwloc論文自身は指摘していない、可視化利用者側から見えた課題である**: hwloc論文はトポロジ抽象化のAPI設計とマルチOS対応を主要な貢献として論じ、`lstopo`による表示形式そのものの是非は検討していない。MemAxesは、hwloc・likwidが共通して用いる水平方向のicicle plotが、階層上位(大きく少ない資源)に不釣り合いに広い視覚領域を割き、下位階層(小さく多数のプロセッサ)の表示可能数を視野の横幅で制限するという欠点を、実際にトポロジ可視化ツールを使う立場から指摘する。この観察は、トポロジ抽象化ライブラリの設計(hwloc論文の主眼)と、それを実際に画面上でどう見せるか(MemAxesの主眼)が別の専門性を要する問題であることを示唆する。(Source: [[@2018__TVCG__MemAxes - Visualization and Analytics for Characterizing Complex Memory Performance Behaviors]] §6.2) - **LIKWID論文([[@2010__ICPPW__LIKWID : A Lightweight Performance-Oriented Tool Suite for x86 Multicore Environments]])のlikwid-topologyは、hwloc論文と同じ2010年に、汎用木構造ではなく`cpuid`直接読み取りによるプロセッサ固有の実装として同じ問題を解いた**: hwloc論文([[@2010__PDP__hwloc a Generic Framework for Managing Hardware Affinities in HPC Applications]] §III)がOS非依存の汎用木構造API設計を志向するのに対し、LIKWID論文のlikwid-topologyは`cpuid`命令(Nehalem以降のleaf 0xB、Core 2以降のleaf 0x4、それ以前はleaf 0x2のルックアップテーブル)から直接プロセッサ・キャッシュトポロジを抽出する、x86に特化した実装を採る。同じ「BIOS設定次第でコア番号と物理トポロジの対応が変わる」という問題意識(LIKWID論文§II、hwloc論文§II-A)を共有しながら、hwlocは汎用APIとしての抽象化を、LIKWIDはx86限定の軽量な直接実装を選んでおり、同一課題に対する「汎用抽象化」対「プラットフォーム特化の単純実装」という設計選択の対比を提供する。(Source: [[@2010__ICPPW__LIKWID : A Lightweight Performance-Oriented Tool Suite for x86 Multicore Environments]], [[@2010__PDP__hwloc a Generic Framework for Managing Hardware Affinities in HPC Applications]] §III) - **MemAxesが批判する水平icicle plotの出典元は、hwloc単体ではなくhwlocとLIKWIDの両方に共通する可視化形式である**: [[@2018__TVCG__MemAxes - Visualization and Analytics for Characterizing Complex Memory Performance Behaviors]]は「hwloc/likwidが用いる水平icicle plot」と両者を並置して批判しており、LIKWID論文自身のlikwid-topology出力例(Figure 1のブロック図的なソケット/コア/キャッシュ表現、`-g`オプションによるASCIIアート出力)を実際に読むと、水平方向の階層積み上げ表現を採用している点でhwlocの`lstopo`と形式的に同型であることが確認できる。トポロジ収集ライブラリ(hwloc)とトポロジ探索コマンドラインツール(likwid-topology)が独立に開発されながら同じ視覚的スケーラビリティの欠点を共有するに至った背景には、「階層構造を左から右・上から下へ積み上げる」という直感的だが上位階層に偏った視覚配分を生む表現形式が、この領域のデファクトスタンダードになっていたことが示唆される。(Source: [[@2018__TVCG__MemAxes - Visualization and Analytics for Characterizing Complex Memory Performance Behaviors]] §6.2, [[@2010__ICPPW__LIKWID : A Lightweight Performance-Oriented Tool Suite for x86 Multicore Environments]] Figure 1) ## 未解決の問い - LIKWIDのlikwid-topologyとhwlocの`lstopo`は、同じ水平icicle plot系の可視化形式を採るが、両者のコード実装や出力フォーマットに直接の系譜関係(一方が他方を参考にした等)があるのか、それとも独立に収斂したのか、本ソース群だけでは判別できない。 - hwlocが2010年時点で示した「オブジェクト型・相対深さに仮定を置かない」設計は、GPU・NVLink・CXLメモリなど2020年代のヘテロジニアス資源(NVIDIA GH200のNUMAピニング等、[[NUMA対応CPUピニング]]で扱われる領域)までどこまで無改造で拡張できているか。 - hwlocのCpuset/バインディングAPIと、Kubernetes・cgroup v2のようなコンテナ時代のCPUピニング機構(`numactl`・cgroup `cpuset`)は、抽象化のレイヤーとしてどう関係するか。同じ木構造モデルを共有しているのか、それとも独立に進化したのか。 - PLPAとhwlocの統合(2010年当時進行中と記述)は最終的にどう決着したか。PLPAのインターフェースはhwloc上に再実装されたのか、PLPA自体が廃止されたのか。 - MemAxesが提案した放射状(sunburst型)トポロジ可視化は、hwloc本体や`lstopo`に採用・統合されたか。可視化レイアウトの改善提案が、抽象化ライブラリ側にフィードバックされる経路は存在するか。 ## 関連 - ソース: [[@2010__PDP__hwloc a Generic Framework for Managing Hardware Affinities in HPC Applications]] / [[@2018__TVCG__MemAxes - Visualization and Analytics for Characterizing Complex Memory Performance Behaviors]] / [[@2010__ICPPW__LIKWID : A Lightweight Performance-Oriented Tool Suite for x86 Multicore Environments]] - エンティティ: [[hwloc]] / [[LIKWID]] - 関連概念: [[NUMA対応CPUピニング]](numactl(8)による明示的CPUバインドの実務的観点) / [[メモリ階層とキャッシュ]](キャッシュ共有構造の基礎) / [[性能データの可視化]](トポロジ可視化を含むより広い性能データ可視化の枠組み) ## 出典 - [[@2010__PDP__hwloc a Generic Framework for Managing Hardware Affinities in HPC Applications]](§II-A アフィニティが重要な理由・§III hwlocの設計とAPI・§V 関連研究(PLPAとの比較)) - [[@2018__TVCG__MemAxes - Visualization and Analytics for Characterizing Complex Memory Performance Behaviors]](§6.2 ハードウェアトポロジビュー、Fig. 4-5) - [[@2010__ICPPW__LIKWID : A Lightweight Performance-Oriented Tool Suite for x86 Multicore Environments]](likwid-topologyの`cpuid`ベース実装・Figure 1のトポロジ図)