タグ

ブックマーク / kumagi.hatenadiary.org (4)

  • Lock-free スナップショットの撮り方を説明してみる - くまメモ

    マルチスレッドなどの環境下で時間経過によって勝手に変化する複数の変数を読みたい場面は多くあります。 しかしCPUは一度に一つしか値を読み書きできないので、簡単には出来ません。 何故なら読んでるそばから値が変動してでたらめな値を読むかも知れないからです。 変動してるものを読むのだから読む側が完璧じゃなくても仕方ないという妥協は有り得ますが 特定のある一瞬の時刻での状態を写真のようにパチリとフィルムに収められたら嬉しいですよね。 一番簡単なのはロックを取りながら読む事ですが、ロックは諸般の事情により使えない事とします。 前提 値が勝手に変動するという状況が分かりにくいと思うので、適当な例えとして卵の孵化を想像してみましょう。 「卵」→「ヒビ」→「ひよこ」 の順でランダムに勝手に進んで行きます。止めることは出来ませんし後戻りもしません。 こんな卵が複数ある孵化器の監視を任されたとします。卵の状態

    Lock-free スナップショットの撮り方を説明してみる - くまメモ
  • Non-blocking STMについて頑張って説明してみる - くまメモ

    STMはソフトウェアトランザクショナルメモリの略です。 ↓とりあえずwikipedia http://ja.wikipedia.org/wiki/%E3%82%BD%E3%83%95%E3%83%88%E3%82%A6%E3%82%A7%E3%82%A2%E3%83%88%E3%83%A9%E3%83%B3%E3%82%B6%E3%82%AF%E3%82%B7%E3%83%A7%E3%83%8A%E3%83%AB%E3%83%A1%E3%83%A2%E3%83%AA 日でSTMの話題を検索すると「楽観的ロックでしょ?」といった発言を見かける事が多く、確かに実用的な手法の多くはロックベースだったりしていますが、正直なところロックベースな手法のSTMはデータベースでのトランザクションと似ているフシがあったりしてデータベースに詳しい人からするとそれほど驚くような手法ではない事が多いのです。その

    Non-blocking STMについて頑張って説明してみる - くまメモ
    mooz
    mooz 2011/12/10
  • perfでぺろぺろしていたら詰まった - くまメモ

    perfという大変優秀なプロファイラがあります。どう優秀かというと ・gprofと違い、-pgなど付けなくとも既存のバイナリに対して実行できます ・バイナリに対して実行できるという事はあらゆる言語の実行を観察できます sudo apt-get install linux-tools まずこれで必要なツールは入ります。 試しに何かのパフォーマンスを見てみましょう $ perf stat ruby -e'100000.times{|n|p n}' 実行にかかったCPUサイクル数、分岐の数、分岐予測ミス数、キャッシュ参照数、キャッシュミス数などがズラズラ出ます。IPCなども計算されてプログラムの性質がわかります。 これでは物足りない人は、自分の好みの通りにセッティングを変えることもできます。 $ perf list で観測可能なモノのリストが表示されるので、その中から好きなものをコンマで繋いで例

    perfでぺろぺろしていたら詰まった - くまメモ
  • non-blockingの意味するところ - くまメモ

    海外の文献を読み漁っていると気づくのですが 2003年を境にこの文脈で使われる言葉の定義が変わります。 ↑2003年ごろまでの構図 ↑現在の構図。*1 non-blocking = obstruction-free という理解でもおおよそ間違いではないとは思いますが 論文を読むに当たって non-blocking = ロックを使わないアルゴリズム全般 obstruction-free = 非lock-freeだけどロックだけはしない というニュアンスの違いを感じます。 以後、現在の構図の方を前提に話します。ご注意ください。 まずは3つの分類の違いから wait-free 操作が「他のスレッドの動向に関わらず有限ステップで完了できる」場合、そのアルゴリズムはwait-freeと呼ばれます。starvation-freeと呼んだりもします。 実際には初めからここに分類されるアルゴリズムは多くあ

    non-blockingの意味するところ - くまメモ
  • 1