SlideShare a Scribd company logo
ClojureではじめるSTM入門
      @athos0220
    並列/並行基礎勉強会
自己紹介
@athos0220

趣味でClojure触ってます

正直STMとかまともに使ったことないわー

付け焼刃に勉強したので間違ってるところあ
るかも(´・ω・`)

→生温かくご指摘お願いします
What’s STM?
STMとは
Software Transactional Memory
ソフトウェアトランザクショナルメモリは、データベーストラン
ザクションに似た並行性制御機構であり、並列計算を行う際の
共有メモリへのアクセス法である。
この機構はロックベースの同期を用いた並行性制御の代替手段と
して機能し、ノンブロッキングな方法で実装される物もある。
                                Wikipediaより


楽観的:
  他のスレッドを気にせずとりあえず実行してみる
  変なことになったらリトライする

最近盛んに研究されている(らしい)
ロックの利点と欠点
利点

 いつロックを取得し、解除するかを陽に制御できる

 開発者にとって馴染みがある方法

 多くのプログラミング言語でサポートされている

欠点

 ロックのとる順序によってデッドロックが起こる

 優先度逆転が起こる

 composableでない
STMの利点と欠点
利点

 デッドロックや優先度逆転が起きない

 楽観的なので並行性が向上する

 composableである(ネストできる)

欠点

 リトライが頻発することでパフォーマンスが悪くなる

 余分なオーバーヘッドがかかる

 トランザクション内では副作用を避ける必要がある
各言語での対応状況
言語(処理系)組込み

 Clojure, Haskell, Perl6(Pugs)

ライブラリ

 C, C++, C#, Common Lisp, Java, OCaml,
 Python, Scala, Smalltalk

どの入門書にもSTMの解説があるのはClojure
だけ
How to use STM
   in Clojure
STMの基本構文・関数
(dosync <body>):<body>をトランザクションで
実行

(ref <val>):トランザクション内で変更が可能な
参照(Ref型)を生成

(deref <ref>):Refにくるまれた値をデリファレ
ンス。@<ref>は糖衣構文

(ref-set <ref> <val>):Refの値を変更する。
dosyncの外で使うとエラーになる
STMを使ったコード
                    (def counter (ref 42))
                             counter

                              42
         Thread A                               Thread B

(dosync                                (dosync
  (let [v @counter]                      (let [v @counter]
    (when (<= v 100)                       (when (<= v 100)
      (ref-set counter                       (ref-set counter
               (inc v)))))                            (inc v)))))
STMを使ったコード
                    (def counter (ref 42))
                             counter

                              42
         Thread A                               Thread B

(dosync                                (dosync
  (let [v @counter]                      (let [v @counter]
    (when (<= v 100)                       (when (<= v 100)
      (ref-set counter                       (ref-set counter
               (inc v)))))                            (inc v)))))
STMを使ったコード
                    (def counter (ref 42))
                             counter

                              42
         Thread A                               Thread B

(dosync                                (dosync
  (let [v @counter]                      (let [v @counter]
    (when (<= v 100)                       (when (<= v 100)
      (ref-set counter                       (ref-set counter
               (inc v)))))                            (inc v)))))

            42
STMを使ったコード
                    (def counter (ref 42))
                             counter

                              42
         Thread A                               Thread B

(dosync                                (dosync
  (let [v @counter]                      (let [v @counter]
    (when (<= v 100)                       (when (<= v 100)
      (ref-set counter                       (ref-set counter
               (inc v)))))                            (inc v)))))

            42                                     42
STMを使ったコード
                    (def counter (ref 42))
                             counter

                              42
         Thread A                               Thread B

(dosync                                (dosync
  (let [v @counter]                      (let [v @counter]
    (when (<= v 100)                       (when (<= v 100)
      (ref-set counter                       (ref-set counter
               (inc v)))))                            (inc v)))))

            43                                     42
STMを使ったコード
                    (def counter (ref 42))
                             counter

                              42
         Thread A                               Thread B

(dosync                                (dosync
  (let [v @counter]                      (let [v @counter]
    (when (<= v 100)                       (when (<= v 100)
      (ref-set counter                       (ref-set counter
               (inc v)))))                            (inc v)))))

            43      この時点の変更はBからは見えない
                                 42
STMを使ったコード
                    (def counter (ref 42))
                             counter

                              42
         Thread A                               Thread B

(dosync                                (dosync
  (let [v @counter]                      (let [v @counter]
    (when (<= v 100)                       (when (<= v 100)
      (ref-set counter                       (ref-set counter
               (inc v)))))                            (inc v)))))

            43                                     42
STMを使ったコード
                    (def counter (ref 42))
                             counter

                              42
         Thread A                               Thread B

(dosync                                (dosync
  (let [v @counter]                      (let [v @counter]
    (when (<= v 100)                       (when (<= v 100)
      (ref-set counter                       (ref-set counter
               (inc v)))))                            (inc v)))))

            43      他で値が変更されていなければコミット
                                 42
STMを使ったコード
                    (def counter (ref 42))
                             counter

                              43
         Thread A                               Thread B

(dosync                                (dosync
  (let [v @counter]                      (let [v @counter]
    (when (<= v 100)                       (when (<= v 100)
      (ref-set counter                       (ref-set counter
               (inc v)))))                            (inc v)))))

            43                     コミット!           42
STMを使ったコード
                    (def counter (ref 42))
                             counter

                              43
         Thread A                               Thread B

(dosync                                (dosync
  (let [v @counter]                      (let [v @counter]
    (when (<= v 100)                       (when (<= v 100)
      (ref-set counter                       (ref-set counter
               (inc v)))))                            (inc v)))))

                                                   42
STMを使ったコード
                    (def counter (ref 42))
                             counter

                              43
         Thread A                               Thread B

(dosync                                (dosync
  (let [v @counter]                      (let [v @counter]
    (when (<= v 100)                       (when (<= v 100)
      (ref-set counter                       (ref-set counter
               (inc v)))))                            (inc v)))))

                                                  43
STMを使ったコード
                    (def counter (ref 42))
                             counter

                              43
         Thread A                               Thread B

(dosync                                (dosync
  (let [v @counter]                      (let [v @counter]
    (when (<= v 100)                       (when (<= v 100)
      (ref-set counter                       (ref-set counter
               (inc v)))))                            (inc v)))))

                                                  43
STMを使ったコード
                    (def counter (ref 42))
                             counter

                              43
         Thread A                               Thread B

(dosync                                (dosync
  (let [v @counter]                      (let [v @counter]
    (when (<= v 100)                       (when (<= v 100)
      (ref-set counter                       (ref-set counter
               (inc v)))))                            (inc v)))))

Aが値を変更したので失敗                                      43
STMを使ったコード
                    (def counter (ref 42))
                             counter

                              43
         Thread A                               Thread B

(dosync                                (dosync
  (let [v @counter]                      (let [v @counter]
    (when (<= v 100)                       (when (<= v 100)
      (ref-set counter                       (ref-set counter
               (inc v)))))                            (inc v)))))

  トランザクションを最初からやり直す                                43
STMを使ったコード
                    (def counter (ref 42))
                             counter

                              43
         Thread A                               Thread B

(dosync                                (dosync
  (let [v @counter]                      (let [v @counter]
    (when (<= v 100)                       (when (<= v 100)
      (ref-set counter                       (ref-set counter
               (inc v)))))                            (inc v)))))

                                                   43
STMを使ったコード
                    (def counter (ref 42))
                             counter

                              43
         Thread A                               Thread B

(dosync                                (dosync
  (let [v @counter]                      (let [v @counter]
    (when (<= v 100)                       (when (<= v 100)
      (ref-set counter                       (ref-set counter
               (inc v)))))                            (inc v)))))

                                                   43
STMを使ったコード
                    (def counter (ref 42))
                             counter

                              43
         Thread A                               Thread B

(dosync                                (dosync
  (let [v @counter]                      (let [v @counter]
    (when (<= v 100)                       (when (<= v 100)
      (ref-set counter                       (ref-set counter
               (inc v)))))                            (inc v)))))

                                                  44
STMを使ったコード
                    (def counter (ref 42))
                             counter

                              43
         Thread A                               Thread B

(dosync                                (dosync
  (let [v @counter]                      (let [v @counter]
    (when (<= v 100)                       (when (<= v 100)
      (ref-set counter                       (ref-set counter
               (inc v)))))                            (inc v)))))

                                                  44
STMを使ったコード
                    (def counter (ref 42))
                             counter

                              44
         Thread A                               Thread B

(dosync                                (dosync
  (let [v @counter]                      (let [v @counter]
    (when (<= v 100)                       (when (<= v 100)
      (ref-set counter                       (ref-set counter
               (inc v)))))                            (inc v)))))

                コミット!                             44
ClojureのSTM観
       Thread A                              Thread B
                            a
... @a ...
                                    ... (ref-set a ...) ...
... (ref-set b ...) ...
                                b
                                       ... (ref-set b ...) ...
  ... (ref-set c ...) ...       c
   トランザクションは更新するRefを集めていく
   途中で他のトランザクションが手を出しているRefに触ったらアボート
   →リトライ
   すべてのRefを集めて最後まで行ければゴール→コミット
ClojureのSTM観
       Thread A                              Thread B
                            a
... @a ...
                                    ... (ref-set a ...) ...
... (ref-set b ...) ...
                                b
                                       ... (ref-set b ...) ...
  ... (ref-set c ...) ...       c
   トランザクションは更新するRefを集めていく
   途中で他のトランザクションが手を出しているRefに触ったらアボート
   →リトライ
   すべてのRefを集めて最後まで行ければゴール→コミット


writeが多いとリトライが頻発して性能低下
Under the hood of STM
Version Clock
すべてのトランザクションで共有するクロック

トランザクションの開始やリトライ、コミット
のたびにインクリメントされる

各トランザクションは自分が開始されたときの
クロックの値を記録する

コミット時にはそのときのクロックの値をRefに
記録する
Ref
いわゆるAtomic Object

主に以下で構成されている

 値の履歴をもつリングバッファ

 ref-setしたが未コミットのトランザクション

 Refを参照・更新する際に使われるロック
in-transaction values
トランザクション内でアクセスしたRefとその値
をローカルに記録する

 Refを更新するときはローカルな値を更新する

 Refから値を読み出すとき、

  ローカルな値があればそれを読み出す

  なければ、Refの履歴をたどってトランザ
  クション開始以前の値を読み出す
MVCC
多版型同時実行制御 (Multiversion Concurrency Control)

  トランザクションの実行中、他のトランザクションが既に
  更新した値を読み出すと一貫性がなくなる

  これを防ぐには以下のような方法がある(2つめがMVCC)

     他が更新済みの値を読み出そうとした時点でアボート
     してリトライ

     値の履歴をとっておいて、トランザクション開始時ま
     で って値を読み出す

  1つめの方法はリトライの可能性が高くなる
write skew
      MVCCで起こる現象

      複数のトランザクション間で不変条件を破るような変更が行
      われたときに発生
                        不変条件

                    @a + @b <= 3
        Thread A                     Thread B

(dosync                     (dosync
  (when (<= (+ @a @b) 2)      (when (<= (+ @a @b) 2)
    (ref-set a (inc a))))       (ref-set b (inc b))))
write skew
      MVCCで起こる現象

      複数のトランザクション間で不変条件を破るような変更が行
      われたときに発生
                        不変条件

                    @a + @b <= 3
        Thread A                     Thread B

(dosync                     (dosync
  (when (<= (+ @a @b) 2)      (when (<= (+ @a @b) 2)
    (ref-set a (inc a))))       (ref-set b (inc b))))

AとBで違うRefを変更しているので両者ともコミットに成功する
           コミット後、不変条件は成り立たなくなる
ensure
      write skewの問題は、暗に存在する「コミットする
      まで変更されない」という条件が破られるために発
      生する
      Clojureでは (ensure <ref>) で、それ以降コミットが
      完了するまで<ref>が変更されないことを保証する
        Thread A                     Thread B
(dosync                     (dosync
  (when (<= (+ @a @b) 2)      (when (<= (+ @a @b) 2)
    (ensure b)                  (ensure a)
    (ref-set a (inc a))))       (ref-set b (inc b))))
  ensureしているRefが他方に変更されればリトライ
Contention management
       Thread A                              Thread B
                            a
... @a ...
                                    ... (ref-set a ...) ...
... (ref-set b ...) ...
                                b
                                       ... (ref-set b ...) ...
  ... (ref-set c ...) ...       c
Contention management
       Thread A                              Thread B
                            a
... @a ...
                                    ... (ref-set a ...) ...
... (ref-set b ...) ...
                                b
                                       ... (ref-set b ...) ...
  ... (ref-set c ...) ...       c

 2つのトランザクションが同じRefをつかもうとしたとき、どちら
 を生かし、どちらをアボートするか?
Contention management
       Thread A                              Thread B
                            a
... @a ...
                                    ... (ref-set a ...) ...
... (ref-set b ...) ...
                                b
                                       ... (ref-set b ...) ...
  ... (ref-set c ...) ...       c

 2つのトランザクションが同じRefをつかもうとしたとき、どちら
 を生かし、どちらをアボートするか?

 戦略次第で性能が大きく左右される
Contention managementの戦略
Contention managementの戦略


 Agressive: 相手を殺す
Contention managementの戦略


 Agressive: 相手を殺す

 Polite: 自分が死ぬ
Contention managementの戦略


 Agressive: 相手を殺す

 Polite: 自分が死ぬ

 Karma: あまり仕事をしていない方が死ぬ
Contention managementの戦略


 Agressive: 相手を殺す

 Polite: 自分が死ぬ

 Karma: あまり仕事をしていない方が死ぬ

 Priority: 年功序列。若いやつが死ぬ
Contention managementの戦略


    Agressive: 相手を殺す

    Polite: 自分が死ぬ

    Karma: あまり仕事をしていない方が死ぬ

    Priority: 年功序列。若いやつが死ぬ

ClojureのContention managementはPriority+α
まとめ
ロックを使って同期するのは辛い

STM!STM!

 Clojureなら初心者でもSTM使えます

ただし、writeが多いと性能低下するなど、問題
点もある → 銀の弾丸ではない

しかし、将来的にはGCのように適用範囲は広
がっていくのでは…?
参考文献

M. Herlihy and N. Shavit. “The Art of Multiprocessor Programming,
Revised Reprint.” Morgan Kaufmann Publishers Inc. 2012

M. Fogus and C. Houser, “The Joy of Clojure.” Manning Pubns Co.
2011

Nielsen, Peder RL, and Patrick T. Kristiansen. "Benchmarking
Contention Management Strategies in Clojure’s Software." Artificial
Intelligence 8.3 (1977): 323-364.

R. Mark Volkmann. “Software Transactional Memory.” http://
java.ociweb.com/mark/stm/article.html

More Related Content

What's hot

Lockfree Queue
Lockfree QueueLockfree Queue
Lockfree Queue
Kumazaki Hiroki
 
10分で分かるLinuxブロックレイヤ
10分で分かるLinuxブロックレイヤ10分で分かるLinuxブロックレイヤ
10分で分かるLinuxブロックレイヤTakashi Hoshino
 
AVX-512(フォーマット)詳解
AVX-512(フォーマット)詳解AVX-512(フォーマット)詳解
AVX-512(フォーマット)詳解
MITSUNARI Shigeo
 
競プロでGo!
競プロでGo!競プロでGo!
競プロでGo!
鈴木 セシル
 
GoogleのSHA-1のはなし
GoogleのSHA-1のはなしGoogleのSHA-1のはなし
GoogleのSHA-1のはなし
MITSUNARI Shigeo
 
Where狙いのキー、order by狙いのキー
Where狙いのキー、order by狙いのキーWhere狙いのキー、order by狙いのキー
Where狙いのキー、order by狙いのキー
yoku0825
 
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
Takuto Wada
 
katagaitai CTF勉強会 #5 Crypto
katagaitai CTF勉強会 #5 Cryptokatagaitai CTF勉強会 #5 Crypto
katagaitai CTF勉強会 #5 Crypto
trmr
 
イベント駆動プログラミングとI/O多重化
イベント駆動プログラミングとI/O多重化イベント駆動プログラミングとI/O多重化
イベント駆動プログラミングとI/O多重化
Gosuke Miyashita
 
Java仮想マシンの実装技術
Java仮想マシンの実装技術Java仮想マシンの実装技術
Java仮想マシンの実装技術
Kiyokuni Kawachiya
 
LineairDBの紹介
LineairDBの紹介LineairDBの紹介
LineairDBの紹介
Sho Nakazono
 
Gitの便利ワザ
Gitの便利ワザGitの便利ワザ
Gitの便利ワザ
ktateish
 
世界一わかりやすいClean Architecture
世界一わかりやすいClean Architecture世界一わかりやすいClean Architecture
世界一わかりやすいClean Architecture
Atsushi Nakamura
 
[Container Runtime Meetup] runc & User Namespaces
[Container Runtime Meetup] runc & User Namespaces[Container Runtime Meetup] runc & User Namespaces
[Container Runtime Meetup] runc & User Namespaces
Akihiro Suda
 
ヤフー社内でやってるMySQLチューニングセミナー大公開
ヤフー社内でやってるMySQLチューニングセミナー大公開ヤフー社内でやってるMySQLチューニングセミナー大公開
ヤフー社内でやってるMySQLチューニングセミナー大公開
Yahoo!デベロッパーネットワーク
 
DockerとPodmanの比較
DockerとPodmanの比較DockerとPodmanの比較
DockerとPodmanの比較
Akihiro Suda
 
詳説データベース輪読会: 分散合意その2
詳説データベース輪読会: 分散合意その2詳説データベース輪読会: 分散合意その2
詳説データベース輪読会: 分散合意その2
Sho Nakazono
 
Dockerからcontainerdへの移行
Dockerからcontainerdへの移行Dockerからcontainerdへの移行
Dockerからcontainerdへの移行
Kohei Tokunaga
 
Javaバイトコード入門
Javaバイトコード入門Javaバイトコード入門
Javaバイトコード入門
Kota Mizushima
 
CRC-32
CRC-32CRC-32
CRC-32
7shi
 

What's hot (20)

Lockfree Queue
Lockfree QueueLockfree Queue
Lockfree Queue
 
10分で分かるLinuxブロックレイヤ
10分で分かるLinuxブロックレイヤ10分で分かるLinuxブロックレイヤ
10分で分かるLinuxブロックレイヤ
 
AVX-512(フォーマット)詳解
AVX-512(フォーマット)詳解AVX-512(フォーマット)詳解
AVX-512(フォーマット)詳解
 
競プロでGo!
競プロでGo!競プロでGo!
競プロでGo!
 
GoogleのSHA-1のはなし
GoogleのSHA-1のはなしGoogleのSHA-1のはなし
GoogleのSHA-1のはなし
 
Where狙いのキー、order by狙いのキー
Where狙いのキー、order by狙いのキーWhere狙いのキー、order by狙いのキー
Where狙いのキー、order by狙いのキー
 
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
 
katagaitai CTF勉強会 #5 Crypto
katagaitai CTF勉強会 #5 Cryptokatagaitai CTF勉強会 #5 Crypto
katagaitai CTF勉強会 #5 Crypto
 
イベント駆動プログラミングとI/O多重化
イベント駆動プログラミングとI/O多重化イベント駆動プログラミングとI/O多重化
イベント駆動プログラミングとI/O多重化
 
Java仮想マシンの実装技術
Java仮想マシンの実装技術Java仮想マシンの実装技術
Java仮想マシンの実装技術
 
LineairDBの紹介
LineairDBの紹介LineairDBの紹介
LineairDBの紹介
 
Gitの便利ワザ
Gitの便利ワザGitの便利ワザ
Gitの便利ワザ
 
世界一わかりやすいClean Architecture
世界一わかりやすいClean Architecture世界一わかりやすいClean Architecture
世界一わかりやすいClean Architecture
 
[Container Runtime Meetup] runc & User Namespaces
[Container Runtime Meetup] runc & User Namespaces[Container Runtime Meetup] runc & User Namespaces
[Container Runtime Meetup] runc & User Namespaces
 
ヤフー社内でやってるMySQLチューニングセミナー大公開
ヤフー社内でやってるMySQLチューニングセミナー大公開ヤフー社内でやってるMySQLチューニングセミナー大公開
ヤフー社内でやってるMySQLチューニングセミナー大公開
 
DockerとPodmanの比較
DockerとPodmanの比較DockerとPodmanの比較
DockerとPodmanの比較
 
詳説データベース輪読会: 分散合意その2
詳説データベース輪読会: 分散合意その2詳説データベース輪読会: 分散合意その2
詳説データベース輪読会: 分散合意その2
 
Dockerからcontainerdへの移行
Dockerからcontainerdへの移行Dockerからcontainerdへの移行
Dockerからcontainerdへの移行
 
Javaバイトコード入門
Javaバイトコード入門Javaバイトコード入門
Javaバイトコード入門
 
CRC-32
CRC-32CRC-32
CRC-32
 

More from sohta

Clojureシンタックスハイライター開発から考えるこれからのlispに必要なもの
Clojureシンタックスハイライター開発から考えるこれからのlispに必要なものClojureシンタックスハイライター開発から考えるこれからのlispに必要なもの
Clojureシンタックスハイライター開発から考えるこれからのlispに必要なもの
sohta
 
入門Transducers
入門Transducers入門Transducers
入門Transducers
sohta
 
Clojure Language Update (2015)
Clojure Language Update (2015)Clojure Language Update (2015)
Clojure Language Update (2015)
sohta
 
入門ClojureScript
入門ClojureScript入門ClojureScript
入門ClojureScript
sohta
 
入門core.async
入門core.async入門core.async
入門core.async
sohta
 
プログラミング言語Clojureのニャンパスでの活用事例
プログラミング言語Clojureのニャンパスでの活用事例プログラミング言語Clojureのニャンパスでの活用事例
プログラミング言語Clojureのニャンパスでの活用事例
sohta
 
REPLライフをもっと快適に
REPLライフをもっと快適にREPLライフをもっと快適に
REPLライフをもっと快適に
sohta
 
genuine-highlighter: マクロを認識するClojure向けのシンタックスハイライター
genuine-highlighter: マクロを認識するClojure向けのシンタックスハイライターgenuine-highlighter: マクロを認識するClojure向けのシンタックスハイライター
genuine-highlighter: マクロを認識するClojure向けのシンタックスハイライター
sohta
 
Macros in Clojure
Macros in ClojureMacros in Clojure
Macros in Clojuresohta
 
Clojureによるバイトコードプログラミング
ClojureによるバイトコードプログラミングClojureによるバイトコードプログラミング
Clojureによるバイトコードプログラミングsohta
 

More from sohta (10)

Clojureシンタックスハイライター開発から考えるこれからのlispに必要なもの
Clojureシンタックスハイライター開発から考えるこれからのlispに必要なものClojureシンタックスハイライター開発から考えるこれからのlispに必要なもの
Clojureシンタックスハイライター開発から考えるこれからのlispに必要なもの
 
入門Transducers
入門Transducers入門Transducers
入門Transducers
 
Clojure Language Update (2015)
Clojure Language Update (2015)Clojure Language Update (2015)
Clojure Language Update (2015)
 
入門ClojureScript
入門ClojureScript入門ClojureScript
入門ClojureScript
 
入門core.async
入門core.async入門core.async
入門core.async
 
プログラミング言語Clojureのニャンパスでの活用事例
プログラミング言語Clojureのニャンパスでの活用事例プログラミング言語Clojureのニャンパスでの活用事例
プログラミング言語Clojureのニャンパスでの活用事例
 
REPLライフをもっと快適に
REPLライフをもっと快適にREPLライフをもっと快適に
REPLライフをもっと快適に
 
genuine-highlighter: マクロを認識するClojure向けのシンタックスハイライター
genuine-highlighter: マクロを認識するClojure向けのシンタックスハイライターgenuine-highlighter: マクロを認識するClojure向けのシンタックスハイライター
genuine-highlighter: マクロを認識するClojure向けのシンタックスハイライター
 
Macros in Clojure
Macros in ClojureMacros in Clojure
Macros in Clojure
 
Clojureによるバイトコードプログラミング
ClojureによるバイトコードプログラミングClojureによるバイトコードプログラミング
Clojureによるバイトコードプログラミング
 

Recently uploaded

論文紹介: Exploiting semantic segmentation to boost reinforcement learning in vid...
論文紹介: Exploiting semantic segmentation to boost reinforcement learning in vid...論文紹介: Exploiting semantic segmentation to boost reinforcement learning in vid...
論文紹介: Exploiting semantic segmentation to boost reinforcement learning in vid...
atsushi061452
 
2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx
2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx
2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx
yassun7010
 
YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)
YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)
YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)
NTT DATA Technology & Innovation
 
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアルLoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
CRI Japan, Inc.
 
【AI論文解説】Consistency ModelとRectified Flow
【AI論文解説】Consistency ModelとRectified Flow【AI論文解説】Consistency ModelとRectified Flow
【AI論文解説】Consistency ModelとRectified Flow
Sony - Neural Network Libraries
 
MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。
MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。
MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。
iPride Co., Ltd.
 
単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...
単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...
単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...
Fukuoka Institute of Technology
 
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
harmonylab
 
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
Matsushita Laboratory
 
FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdfFIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
FIDO Alliance
 
FIDO Alliance Osaka Seminar: CloudGate.pdf
FIDO Alliance Osaka Seminar: CloudGate.pdfFIDO Alliance Osaka Seminar: CloudGate.pdf
FIDO Alliance Osaka Seminar: CloudGate.pdf
FIDO Alliance
 
論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes
論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes
論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes
atsushi061452
 
FIDO Alliance Osaka Seminar: Welcome Slides.pdf
FIDO Alliance Osaka Seminar: Welcome Slides.pdfFIDO Alliance Osaka Seminar: Welcome Slides.pdf
FIDO Alliance Osaka Seminar: Welcome Slides.pdf
FIDO Alliance
 
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdfFIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
FIDO Alliance
 
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdfFIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
FIDO Alliance
 

Recently uploaded (15)

論文紹介: Exploiting semantic segmentation to boost reinforcement learning in vid...
論文紹介: Exploiting semantic segmentation to boost reinforcement learning in vid...論文紹介: Exploiting semantic segmentation to boost reinforcement learning in vid...
論文紹介: Exploiting semantic segmentation to boost reinforcement learning in vid...
 
2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx
2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx
2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx
 
YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)
YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)
YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)
 
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアルLoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
 
【AI論文解説】Consistency ModelとRectified Flow
【AI論文解説】Consistency ModelとRectified Flow【AI論文解説】Consistency ModelとRectified Flow
【AI論文解説】Consistency ModelとRectified Flow
 
MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。
MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。
MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。
 
単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...
単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...
単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...
 
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
 
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
 
FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdfFIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
 
FIDO Alliance Osaka Seminar: CloudGate.pdf
FIDO Alliance Osaka Seminar: CloudGate.pdfFIDO Alliance Osaka Seminar: CloudGate.pdf
FIDO Alliance Osaka Seminar: CloudGate.pdf
 
論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes
論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes
論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes
 
FIDO Alliance Osaka Seminar: Welcome Slides.pdf
FIDO Alliance Osaka Seminar: Welcome Slides.pdfFIDO Alliance Osaka Seminar: Welcome Slides.pdf
FIDO Alliance Osaka Seminar: Welcome Slides.pdf
 
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdfFIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
 
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdfFIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
 

ClojureではじめるSTM入門