Meta tags:
description= transactional memory STM 分散システム;
keywords= トランザクション 分散システム;
Headings (most frequently used words):
software, transactional, memo, llvmやるならgodbolt, stm関係のことをメモっていこうと思います,
Text of the page (most frequently used words):
#llvm (11), #コンパイラ (9), #アセンブリ (7), 2023 (7), #読者になる (6), #レジスタ (5), 2018 (5), 2013 (5), 2017 (5), 2022 (5), #software (4), #transactional (4), #memo (4), 2012 (3), 2016 (3), 2019 (3), 閉じる (3), 2021 (3), x86 (2), #読者をやめる (2), #irで表現されたコード (2), llvmやるならgodbolt (2), コンパイル (2), kumagi (2), 読者です (2), 2020 (2), control (2), 2014 (2), 2015 (2), 2011 (2), これは (2), graph (2), flow (2), とかで検索すれば多分解説している記事がある, 静的単一代入, の事で, 機械語, representation, アセンブリ言語, ir出力, だがしばらく見ないうちに, この辺は, 関連の機能が超強化されていたので紹介したい, これがすごいのは, の選択肢の豊富さである, はもちろんのことclang, zig, 内部でいったん独自言語に置き換えることでcpu固有の問題, 一度代入された, 割付等, に割り付け直す事で最適なコードを出力する, に落とす際にcpuの台所事情に合わせて適宜物理, は書き換える事ができない, は必要に応じてどこまでも大きくなりうるし, 1などと名付けられている, の数に制限が無いので, に似ているが, を後回しにして最適化を行い, 見たところは, その後で各cpu固有のコード出力を行うまでの間に使う仮想的な, である, irとは, intermediate, msvc, の中間表現, 愛好家の皆さんなら当然知っていた情報だと思う, なにそれ, の挙動について学ぶ事ができる, こんな感じに, 結果の, を表示してくれる, 例えば簡単に, 渡された数nに対し1, nを返す関数sum, を例にすると, ブラウザから誰でもアクセスできる無料サービスで, godbolt, この機能を実現するために必要な労力は並では無いと思うが詳細はわからない, org, godboltをご存知だろうか, この記事は, の11日目の記事です, pyspa, advent, calendar, プログラミング, 側も複数色あるのは元のコードの1行が同じ背景色のブロックになった事を表している, はマウスカーソルを置くとそれが元のコードのどの場所に対応したものなのかを逐一ハイライト表示してくれる, ellcc, m68kの他聞いたこと無いものまでたくさんのターゲットが選べる, 6502, など様々な, が選べる, しかも, のバージョンの選択肢も豊富で, ターゲットとして, やarmはもちろんのこと, オプションも, gcc, o2など指定し放題なので最適化オプションごとの, の違いも一目瞭然のとっても便利なツールである, ここまでの話なら, 以下のは, mips, atari, sparc, risc, nvc, のもの, つまり入力と出力の型が一致している, のも出せる, このブログについて, 最新記事, はてなブログpro, 週刊はてなブログ, ブログをはじめる, はてなブログ, リンク, treeプチフリ神話の終わり, プロフィール, 次のページ, コメントを書く, もっと読む, 広告を非表示にする, ここで紹介した機能は, 間接参照を巨大仮想メモリで飲み込む, 世紀末lsm, new, powered, 限定公開記事のため引用できません, 引用をストックできませんでした, 再度お試しください, ログイン, 引用するにはまずログインしてください, ストック一覧を見る, 引用をストックしました, ストレージとコンフィグでデータベースのグリッチを探す, ブログを報告する, hatena, blog, エンジニアグループ, 参加グループ, 月別アーカイブ, 禅とオートバイ修理技術, をプログラマが読んだ, add, のドロップダウンリストから選択できる, に限らず普通の, 作ってる人には嬉しい, 最適化ロジックを新規追加する際にはパイプラインを長くするだけなので既存の最適化ロジックに一切触らなくて良い, の最適化は, を入力として, を出力とする最適化パイプラインを通り抜ける事で最適化が実行される, この方法の優れた点は, のast表現も出せる, 使って, の出力は分岐命令で区切られたbb, しやすい, basic, block, という単位で管理されている, ラベル名が, for, body, preheader, とかで目で追いかけるのが辛いこともあるのでこのようにエッジを張ったグラフとして可視化してくれる, 単体テスト, 個々の最適化ロジックについて入力前と出力後のコードが明らかなので, ここで紹介していない機能や僕には理解できなかった機能も山ほどあるので, 緑色のロジックがコードの最適化に成功したロジックなのでそれを上から順番にクリックしていけば, 好きの各位は是非いろいろ探して共有して欲しい, これはかなりすごい, かなり前に, 等差数列の和の公式を, が使ってループを自動で潰してくれる, という話は一部で話題になったが, この最適化パイプラインを追いかけるとどこでそれが起きたか一目瞭然である, 上でループが消えた瞬間がわかる, パイプラインを組み替えれば特定のバグがどの最適化ロジックによってもたらされたかを簡単に見つけられる, 左端が最適化パイプラインに並ぶロジック名, 中央がそのステップでの最適化前コード, 右が最適化後コード, そして何よりびっくりしたのがその可視化である, などが挙げられる, つまりスケーラブルなソフトウェア, をしている, アーキテクチャ, stm関係のことをメモっていこうと思います,
Text of the page (random words):
software transactional memo software transactional memo 読者になる software transactional memo stm関係のことをメモっていこうと思います 2023 12 11 llvmやるならgodbolt プログラミング この記事は pyspa advent calendar 2023 の11日目の記事です godboltをご存知だろうか godbolt org ブラウザから誰でもアクセスできる無料サービスで コンパイラ の挙動について学ぶ事ができる 例えば簡単に 渡された数nに対し1 2 nを返す関数sum を例にすると こんな感じに コンパイル 結果の アセンブリ を表示してくれる アセンブリ はマウスカーソルを置くとそれが元のコードのどの場所に対応したものなのかを逐一ハイライト表示してくれる この機能を実現するために必要な労力は並では無いと思うが詳細はわからない アセンブリ 側も複数色あるのは元のコードの1行が同じ背景色のブロックになった事を表している これがすごいのは コンパイラ の選択肢の豊富さである gcc はもちろんのことclang zig c msvc nvc なにそれ ellcc 6502 c など様々な コンパイラ が選べる しかも コンパイラ のバージョンの選択肢も豊富で ターゲットとして x86 やarmはもちろんのこと risc v sparc atari mips m68kの他聞いたこと無いものまでたくさんのターゲットが選べる コンパイル オプションも o2など指定し放題なので最適化オプションごとの アセンブリ の違いも一目瞭然のとっても便利なツールである ここまでの話なら コンパイラ 愛好家の皆さんなら当然知っていた情報だと思う だがしばらく見ないうちに llvm 関連の機能が超強化されていたので紹介したい llvm ir出力 llvm irとは llvm の中間表現 intermediate representation の事で コンパイラ 内部でいったん独自言語に置き換えることでcpu固有の問題 レジスタ 割付等 を後回しにして最適化を行い その後で各cpu固有のコード出力を行うまでの間に使う仮想的な アセンブリ言語 である 見たところは アセンブリ に似ているが レジスタ の数に制限が無いので 1などと名付けられている レジスタ は必要に応じてどこまでも大きくなりうるし 一度代入された レジスタ は書き換える事ができない 機械語 に落とす際にcpuの台所事情に合わせて適宜物理 レジスタ に割り付け直す事で最適なコードを出力する この辺は 静的単一代入 とかで検索すれば多分解説している記事がある control flow graph llvm の出力は分岐命令で区切られたbb basic block という単位で管理されている ラベル名が for body preheader とかで目で追いかけるのが辛いこともあるのでこのようにエッジを張ったグラフとして可視化してくれる これは llvm に限らず普通の アセンブリ のも出せる 以下のは x86 のもの control flow graph llvm のast表現も出せる これは llvm 使って コンパイラ 作ってる人には嬉しい llvm の最適化は llvm irで表現されたコード を入力として llvm irで表現されたコード を出力とする最適化パイプラインを通り抜ける事で最適化が実行される つまり入力と出力の型が一致している この方法の優れた点は 最適化ロジックを新規追加する際にはパイプラインを長くするだけなので既存の最適化ロジックに一切触らなくて良い 個々の最適化ロジックについて入力前と出力後のコードが明らかなので 単体テスト しやすい パイプラインを組み替えれば特定のバグがどの最適化ロジックによってもたらされたかを簡単に見つけられる などが挙げられる つまりスケーラブルなソフトウェア アーキテクチャ をしている そして何よりびっくりしたのがその可視化である 左端が最適化パイプラインに並ぶロジック名 中央がそのステップでの最適化前コード 右が最適化後コード これはかなりすごい かなり前に 等差数列の和の公式を コンパイラ が使ってループを自動で潰してくれる という話は一部で話題になったが この最適化パイプラインを追いかけるとどこでそれが起きたか一目瞭然である 緑色のロジックがコードの最適化に成功したロジックなのでそれを上から順番にクリックしていけば アセンブリ 上でループが消えた瞬間がわかる ここで紹介した機能は add new のドロップダウンリストから選択できる ここで紹介していない機能や僕には理解できなかった機能も山ほどあるので コンパイラ 好きの各位は是非いろいろ探して共有して欲しい kumagi 2023 12 11 10 18 読者になる 広告を非表示にする もっと読む コメントを書く 次のページ プロフィール id kumagi 読者です 読者をやめる 読者になる 読者になる このブログについて 検索 リンク はてなブログ ブログをはじめる 週刊はてなブログ はてなブログpro 最新記事 llvmやるならgodbolt 間接参照を巨大仮想メモリで飲み込む 世紀末lsm treeプチフリ神話の終わり ストレージとコンフィグでデータベースのグリッチを探す 禅とオートバイ修理技術 をプログラマが読んだ 月別アーカイブ 2023 2023 12 2023 9 2023 7 2022 2022 12 2022 5 2022 3 2022 2 2021 2021 8 2021 3 2020 2020 6 2019 2019 3 2019 2 2018 2018 11 2018 6 2018 4 2018 3 2017 2017 8 2017 7 2017 6 2017 5 2016 2016 4 2016 2 2015 2015 12 2014 2014 5 2013 2013 7 2013 5 2013 2 2013 1 2012 2012 9 2012 1 2011 2011 12 参加グループ エンジニアグループ software transactional memo powered by hatena blog ブログを報告する 引用をストックしました ストック一覧を見る 閉じる 引用するにはまずログインしてください ログイン 閉じる 引用をストックできませんでした 再度お試しください 閉じる 限定公開記事のため引用できません 読者です 読者をやめる 読者になる 読者になる
|