SlideShare ist ein Scribd-Unternehmen logo
1 von 36
並行・並列への C++ としてのアプローチ
自己紹介
@Flast_RO
http://ftp2.jp.vim.org/pub/vim とか
ミラーしてても金は降ってこないので転がり込む先を探
  してる
初めて触ったのは巫女でした
Cryolite の敵
C(ry の敵
Agenda
並行と並列、スレッドとか
Boost.Context
C++ 標準委員会での動き
並行と並列の違い
並行 (concurrent) :複数の処理単位が論理的に独立して
 動作すること
並列 (parallel) :実際に複数の処理単位が同時に動作して
 いる様子

ほとんどの場合混同されてるし、大方通じるので問題な
 いのでは… … ?
プロセスとスレッド
どちらも少なくとも並行を実現
 最近のマルチコア環境ならコアの数だけプロセスもスレッド
  も並列に走るように OS がしてくれる
プロセスは独立したプロセス空間を持つが、スレッドは
 スレッド固有のリソース以外はプロセス内で共有
スケジューリングは OS が担当
プラットフォーム依存の API を使用しないといけない
 プロセス: fork, CreateProcess ...
 スレッド: POSIX Thread, CreateThread ...
はー、またプラットフォーム依存 ...

               sasso-sasso-
Boost
プロセス
 Interprocess, Process(sandbox) ...
スレッド
 Thread, InterThreads(sandbox) ...
その他
 Asio, MPI ...
Boost
プロセス
 Interprocess, Process(sandbox) ...
スレッド
 Thread, InterThreads(sandbox) ...
その他
 Asio, MPI ...
Boost.Thread v2
1.50.0 から v1 は提供されず v2 に完全移行(予定)
C++11 compliance が中心
Move semantics が Boost.Move ベースになる
Boost.DateTime ベースの this_thread::sleep に加え
 Boost.Chrono ベースの this_thread::sleep_(for|until)
Boost.Thread v3
1.55.0 から v3 へ移行予定
  1.50.0 から 1.54.0 は v3 への移行期間
  #define BOOST_THREAD_VERSION 3
マクロで互換性等を細かく設定できる
  e.g. #define BOOST_THREAD_DONT_PROVIDE_FUTURE
     ifdef → boost::unique_future
     else → boost::future
ところで、スレッドにも種類がある
カーネルスレッドとユーザースレッド
スケジューリングを誰がやるかが一番のポイント
 カーネルスレッドは知らないうちに実行コンテキストが変
  わっている
 ユーザースレッドはプログラマが明示的にコンテキストス
  イッチを仕込まなければならない
ユーザースレッド単体では並行しかできないが、カーネ
 ルスレッドは並列に動作する可能性高い
ユーザースレッドのコンテキストスイッチは自分でアセ
 ンブリを書く必要がある
ユーザースレッドの目的
カーネルスレッドはコンテキストスイッチのコストが非
 常に大きい
スケジューリングする必要がある場合
一連の流れを細切れにしてコールバックとかにするより
 処理の流れがわかりやすい
Agenda
並行と並列、スレッドとか
Boost.Context
C++ 標準委員会での動き
Boost.Context
ユーザーレベルでのコンテキストスイッチ機構を提供す
 るライブラリ
作者は Oliver Kowalke
 http://ok73.ok.funpic.de/boost/libs/context/doc/html/
現在サポートされている triple
 上記ドキュメントの Tested Platforms の項を参考にする
 /trunk/libs/context/src/asm/ にあるファイルから推測する
Boost.Context
mini-review 時点ではコンテキストに関する高級な処理が
 あったが trunk に入ってから殆どの機能が削られた
 e.g. context linking / stack unwinding / high-level API
1.50.0 のリリースには含まれないことになりそう
 現に release branch からは削除されている
ctx::fcontext_t orig, fc;

void f(intptr_t)
{
   std::cout << "in context" << std::endl;
   ctx::jump_fcontext(&fc, &orig, 0);
}

int main()
{
   const size_t ctxsize = ctx::default_stacksize();

    ctx::stack_allocator alloc;
    fc.fc_stack.base = alloc.allocate(ctxsize);
    fc.fc_stack.limit = static_cast<char *>(fc.fc_stack.base) - ctxsize;
    ctx::make_fcontext(&fc, f);

    std::cout << "pre jump" << std::endl;
    ctx::jump_fcontext(&orig, &fc, 0);
    std::cout << "post jump" << std::endl;

    alloc.deallocate(fc.fc_stack.base, ctxsize);
}
ちょっとした注意
TLS は使ってはいけない
 多分 SEGV とかそういう話だと思う
スタックのデアロケートを自動化しようとコンテキスト
 内で開放してはいけない
 Deallocate が戻ると SEGV
コンテキスト内ではスコープを意識して使わないと dtor
 が呼ばれないコードになってしまう
エントリーポイントをそのまま出ると exit が呼ばれる
で、結局何が嬉しいんだろう
ユーザースレッドの目的
カーネルスレッドはコンテキストスイッチのコストが非
  常に大きい
スケジューリングする必要がある場合
一連の流れを細切れにしてコールバックとかにするより
  処理の流れがわかりやすい
IO レイテンシの隠蔽
ユーザースレッドの目的
カーネルスレッドはコンテキストスイッチのコストが非
  常に大きい
スケジューリングする必要がある場合
一連の流れを細切れにしてコールバックとかにするより
  処理の流れがわかりやすい
IO レイテンシの隠蔽



       今回はこれを例にとる
で、結局何が嬉しいんだろう

→ stateful な操作は state を持ち回る必要がなくなる
簡単な例
一定間隔でタイマイベントが発生する
毎回少しづつ変化させたい
 例えば 3 回で 1 周
後々全く違う処理を同じイベントで行うかもしれないか
 ら callback のインターフェースは共通化して vector と
 かに突っ込みたい

正直こんな例だとあんまり利点を見いだせないかも ...
例えばコールバックベースだと
function<void()> callback_timer;          int state = 0;
callback_timer = timer_handler;           void timer_handler()
                                          {
while ((event = peek_event()) != FINISH)     switch (state)
{                                            {
  switch (event)                               case 0:
  {                          呼ばれる毎に共有            ... process step 0 ...
    ... snip ...           できる形でどこかに             break;
                                    state      case 1:
    case TIMER:           を保持しないといけな             ... process step 1 ...
      callback_timer();              い           break;
      break;                                   case 2:
                                                 ... process step 2 ...
    ... snip ...                                 break;
  }                                          }
}                       timer_handler を      state = (state + 1) % 3;
                        複数登録できる           }
                        ようにするには ...
例えばコールバックベースだと
vector<function<void()>> timer_callbacks;   void timer_handler(shared_ptr<int> ps)
… snip...                                   {
timer_callbacks.push_back(                     switch (*ps)
   bind(timer_handler,                         {
       make_shared<int>(0));                     case 0:
… snip...                                         ... process step 0 ...
while ((event = peek_event()) != FINISH)          break;
{                                                case 1:
   switch (event)          shared_ptr 等で固有        ... process step 1 ...
   {                                 の            break;
                           状態を持ち回る必要
     ... snip ...                    が           case 2:
     case TIMER:                                  ... process step 2 ...
       for (auto &c : timer_callbacks) c();       break;
       break;                                  }
     ... snip ...                              *ps = (*ps + 1) % 3;
   }                                        }
}
ユーザースレッドを導入すると
fcontext_t fctx;
// s tack とか make_f context とか
                                         void timer_handler(fcontext_t *ctx)
vector<fcontext_t> timer_callbacks;      {
… snip...                                   while (true)
timer_callbacks.push_back(move(fctx));      {
                                               ... process step 0 …
while ((event = peek_event()) != FINISH)       ctx = jump_fcontext(ctx, &fo, 0);
{                固有の状態はコンテキス
  switch (event)            ト                  ... process step 1 …
  {               自身が持ってるので                    ctx = jump_fcontext(ctx, &fo, 0);
                 コンテキストの管理だけ
    ... snip ...        行えば良い
    case TIMER:                                ... process step 2 …
      for (auto &ctx : timer_callbacks)        ctx = jump_fcontext(ctx, &fo, 0);
         jump_fcontext(&fo, &ctx, &ctx);   }
      break;                             }
    ... snip ...
                           シングルスレッドの処
  }                                 理の
}                          流れと同じように書け
                                      る
しかし fcontext_t を直接扱うのはやりづらい ...
高級な実装
正直 Boost.Context は抽象化されてるとはいえ常用するに
 は低級すぎる
現在 Oliver が Boost.Context をベースとした
 Boost.Coroutine を提案して Formal Review 待ち
  http://ok73.ok.funpic.de/boost/libs/coroutine/doc/html/index.html
  GSoC2006 で Eric Niebler が書いた Boost.Coroutine と基本インター
    フェースは同じ
ctx::fcontext_t orig, fc;

void f(intptr_t)
{
                                                         Boost.Context
   std::cout << "in context (pre jump)" << std::endl;
   ctx::jump_fcontext(&fc, &orig, 0);
   std::cout << "in context (post jump)" << std::endl;
   ctx::jump_fcontext(&fc, &orig, 0);
}

int main()
{
                          最後に jump を忘れてはいけないし、
   const size_t ctxsize = ctx::default_stacksize();
                             トップレベルの dtor は呼ばれない
    ctx::stack_allocator alloc;
    fc.fc_stack.base = alloc.allocate(ctxsize);
    fc.fc_stack.limit = static_cast<char *>(fc.fc_stack.base) - ctxsize;
    ctx::make_fcontext(&fc, f);

    std::cout << "pre jump" << std::endl;
    ctx::jump_fcontext(&orig, &fc, 0);
    std::cout << "now yield" << std::endl;
    ctx::jump_fcontext(&orig, &fc, 0);
    std::cout << "post jump" << std::endl;

    alloc.deallocate(fc.fc_stack.base, ctxsize);
}
Boost.Coroutine
typedef coro::coroutine<void()> coro_t;

void f(coro_t::self &self)
{
   std::cout << "in coroutine (pre yield)" << std::endl;
   self.yeild();
   std::cout << "in coroutine (post yield)" << std::endl;
}

int main()
{               最後に yield を呼ぶ必要はないし dtor も呼ばれ
   coro_t c(f);               る

    std::cout << "pre jump" << std::endl;
    c();
    std::cout << “now yield” << std::endl;
    c();
    std::cout << "post jump" << std::endl;
}
Agenda
並行と並列、スレッドとか
Boost.Context
C++ 標準委員会での動き
C++ 標準委員会での動き
Study Group 1
  並行と並列に関する Study Group
n3328 Resumable Functions
  言語仕様としてユーザースレッドを導入する提案
  resumable と await の 2 つの contextual keywords
n3356 C++ Mutable Threads
  Mutable Threads の提案
n3361 C++ Language Constructs for Parallel Programming
  Intel® CilkTM Plus の紹介 ( 提案は次の meeting らしい
C++ 標準委員会での動き
n3378 A preliminary proposal for work executors
   Worker を投げると適当にスケジューリングして裏で実行する
    executer の提案
   Worker の戻り値は投げた時に返ってくる future で取得




しかしこれらが実際に入るのは早くとも C++2x 頃なのでは
まとめ
Boost.Context がコンテキストスイッチを抽象化している
 のでアセンブリとか知らなくても何か遊べそう
  実際のプロダクトに使用されると面白そう
C++ 標準でも並行・並列の関心は高まっている
 が、投入はまだ先
就職先を考えねばならない
Question?

Weitere ähnliche Inhalte

Was ist angesagt?

冬のLock free祭り safe
冬のLock free祭り safe冬のLock free祭り safe
冬のLock free祭り safe
Kumazaki Hiroki
 
組み込みでこそC++を使う10の理由
組み込みでこそC++を使う10の理由組み込みでこそC++を使う10の理由
組み込みでこそC++を使う10の理由
kikairoya
 
そうだったのか! よくわかる process.nextTick() node.jsのイベントループを理解する
そうだったのか! よくわかる process.nextTick() node.jsのイベントループを理解するそうだったのか! よくわかる process.nextTick() node.jsのイベントループを理解する
そうだったのか! よくわかる process.nextTick() node.jsのイベントループを理解する
shigeki_ohtsu
 
LLVMで遊ぶ(整数圧縮とか、x86向けの自動ベクトル化とか)
LLVMで遊ぶ(整数圧縮とか、x86向けの自動ベクトル化とか)LLVMで遊ぶ(整数圧縮とか、x86向けの自動ベクトル化とか)
LLVMで遊ぶ(整数圧縮とか、x86向けの自動ベクトル化とか)
Takeshi Yamamuro
 
関東GPGPU勉強会 LLVM meets GPU
関東GPGPU勉強会 LLVM meets GPU関東GPGPU勉強会 LLVM meets GPU
関東GPGPU勉強会 LLVM meets GPU
Takuro Iizuka
 

Was ist angesagt? (20)

Effective modern-c++#9
Effective modern-c++#9Effective modern-c++#9
Effective modern-c++#9
 
Effective Modern C++ 読書会 Item 35
Effective Modern C++ 読書会 Item 35Effective Modern C++ 読書会 Item 35
Effective Modern C++ 読書会 Item 35
 
クロージャデザインパターン
クロージャデザインパターンクロージャデザインパターン
クロージャデザインパターン
 
Visual C++で使えるC++11
Visual C++で使えるC++11Visual C++で使えるC++11
Visual C++で使えるC++11
 
C++ Transactional Memory言語拡張の紹介
C++ Transactional Memory言語拡張の紹介C++ Transactional Memory言語拡張の紹介
C++ Transactional Memory言語拡張の紹介
 
コルーチンの使い方
コルーチンの使い方コルーチンの使い方
コルーチンの使い方
 
冬のLock free祭り safe
冬のLock free祭り safe冬のLock free祭り safe
冬のLock free祭り safe
 
組み込みでこそC++を使う10の理由
組み込みでこそC++を使う10の理由組み込みでこそC++を使う10の理由
組み込みでこそC++を使う10の理由
 
BoostAsioで可読性を求めるのは間違っているだろうか
BoostAsioで可読性を求めるのは間違っているだろうかBoostAsioで可読性を求めるのは間違っているだろうか
BoostAsioで可読性を求めるのは間違っているだろうか
 
コルーチンを使おう
コルーチンを使おうコルーチンを使おう
コルーチンを使おう
 
Async design with Unity3D
Async design with Unity3DAsync design with Unity3D
Async design with Unity3D
 
コルーチンでC++でも楽々ゲーム作成!
コルーチンでC++でも楽々ゲーム作成!コルーチンでC++でも楽々ゲーム作成!
コルーチンでC++でも楽々ゲーム作成!
 
GPUが100倍速いという神話をぶち殺せたらいいな ver.2013
GPUが100倍速いという神話をぶち殺せたらいいな ver.2013GPUが100倍速いという神話をぶち殺せたらいいな ver.2013
GPUが100倍速いという神話をぶち殺せたらいいな ver.2013
 
x86とコンテキストスイッチ
x86とコンテキストスイッチx86とコンテキストスイッチ
x86とコンテキストスイッチ
 
Boost.SIMD
Boost.SIMDBoost.SIMD
Boost.SIMD
 
そうだったのか! よくわかる process.nextTick() node.jsのイベントループを理解する
そうだったのか! よくわかる process.nextTick() node.jsのイベントループを理解するそうだったのか! よくわかる process.nextTick() node.jsのイベントループを理解する
そうだったのか! よくわかる process.nextTick() node.jsのイベントループを理解する
 
LLVMで遊ぶ(整数圧縮とか、x86向けの自動ベクトル化とか)
LLVMで遊ぶ(整数圧縮とか、x86向けの自動ベクトル化とか)LLVMで遊ぶ(整数圧縮とか、x86向けの自動ベクトル化とか)
LLVMで遊ぶ(整数圧縮とか、x86向けの自動ベクトル化とか)
 
すごいConstたのしく使おう!
すごいConstたのしく使おう!すごいConstたのしく使おう!
すごいConstたのしく使おう!
 
関東GPGPU勉強会 LLVM meets GPU
関東GPGPU勉強会 LLVM meets GPU関東GPGPU勉強会 LLVM meets GPU
関東GPGPU勉強会 LLVM meets GPU
 
デバドラを書いてみよう!
デバドラを書いてみよう!デバドラを書いてみよう!
デバドラを書いてみよう!
 

Andere mochten auch

Scholarship application
Scholarship applicationScholarship application
Scholarship application
pialy22
 
Calea regala 2-3(ne-10.11)a
Calea regala 2-3(ne-10.11)aCalea regala 2-3(ne-10.11)a
Calea regala 2-3(ne-10.11)a
slides_01
 
Calea regala 1-3(dn-11.11)a
Calea regala 1-3(dn-11.11)aCalea regala 1-3(dn-11.11)a
Calea regala 1-3(dn-11.11)a
slides_01
 
Calea regala 3-3(dn-10.11)a
Calea regala 3-3(dn-10.11)aCalea regala 3-3(dn-10.11)a
Calea regala 3-3(dn-10.11)a
slides_01
 

Andere mochten auch (6)

Scholarship application
Scholarship applicationScholarship application
Scholarship application
 
Calea regala 2-3(ne-10.11)a
Calea regala 2-3(ne-10.11)aCalea regala 2-3(ne-10.11)a
Calea regala 2-3(ne-10.11)a
 
Calea regala 1-3(dn-11.11)a
Calea regala 1-3(dn-11.11)aCalea regala 1-3(dn-11.11)a
Calea regala 1-3(dn-11.11)a
 
Calea regala 3-3(dn-10.11)a
Calea regala 3-3(dn-10.11)aCalea regala 3-3(dn-10.11)a
Calea regala 3-3(dn-10.11)a
 
PPL Report-Bab 1
PPL Report-Bab 1PPL Report-Bab 1
PPL Report-Bab 1
 
παροιμίες φθινοπώρου
παροιμίες φθινοπώρουπαροιμίες φθινοπώρου
παροιμίες φθινοπώρου
 

Ähnlich wie Boost9 session

Continuation with Boost.Context
Continuation with Boost.ContextContinuation with Boost.Context
Continuation with Boost.Context
Akira Takahashi
 
Linuxのプロセススケジューラ(Reading the Linux process scheduler)
Linuxのプロセススケジューラ(Reading the Linux process scheduler)Linuxのプロセススケジューラ(Reading the Linux process scheduler)
Linuxのプロセススケジューラ(Reading the Linux process scheduler)
Hiraku Toyooka
 
SystemC Tutorial
SystemC TutorialSystemC Tutorial
SystemC Tutorial
kocha2012
 
for JSDeferred Code Reading
for JSDeferred Code Readingfor JSDeferred Code Reading
for JSDeferred Code Reading
Kenichirou Oyama
 
ラボユース最終成果報告会(Web公開版)
ラボユース最終成果報告会(Web公開版)ラボユース最終成果報告会(Web公開版)
ラボユース最終成果報告会(Web公開版)
Shinichi Awamoto
 
Dive into RTS - another side
Dive into RTS - another sideDive into RTS - another side
Dive into RTS - another side
Kiwamu Okabe
 
PostgreSQL - C言語によるユーザ定義関数の作り方
PostgreSQL - C言語によるユーザ定義関数の作り方PostgreSQL - C言語によるユーザ定義関数の作り方
PostgreSQL - C言語によるユーザ定義関数の作り方
Satoshi Nagayasu
 
Boost.Coroutine
Boost.CoroutineBoost.Coroutine
Boost.Coroutine
melpon
 
T69 c++cli ネイティブライブラリラッピング入門
T69 c++cli ネイティブライブラリラッピング入門T69 c++cli ネイティブライブラリラッピング入門
T69 c++cli ネイティブライブラリラッピング入門
伸男 伊藤
 

Ähnlich wie Boost9 session (20)

Continuation with Boost.Context
Continuation with Boost.ContextContinuation with Boost.Context
Continuation with Boost.Context
 
Linuxのプロセススケジューラ(Reading the Linux process scheduler)
Linuxのプロセススケジューラ(Reading the Linux process scheduler)Linuxのプロセススケジューラ(Reading the Linux process scheduler)
Linuxのプロセススケジューラ(Reading the Linux process scheduler)
 
Pfi Seminar 2010 1 7
Pfi Seminar 2010 1 7Pfi Seminar 2010 1 7
Pfi Seminar 2010 1 7
 
Boost Tour 1.50.0 All
Boost Tour 1.50.0 AllBoost Tour 1.50.0 All
Boost Tour 1.50.0 All
 
SystemC Tutorial
SystemC TutorialSystemC Tutorial
SystemC Tutorial
 
Flow.js
Flow.jsFlow.js
Flow.js
 
思ったほど怖くない! Haskell on JVM 超入門 #jjug_ccc #ccc_l8
思ったほど怖くない! Haskell on JVM 超入門 #jjug_ccc #ccc_l8思ったほど怖くない! Haskell on JVM 超入門 #jjug_ccc #ccc_l8
思ったほど怖くない! Haskell on JVM 超入門 #jjug_ccc #ccc_l8
 
for JSDeferred Code Reading
for JSDeferred Code Readingfor JSDeferred Code Reading
for JSDeferred Code Reading
 
Boost tour 1_40_0
Boost tour 1_40_0Boost tour 1_40_0
Boost tour 1_40_0
 
boost tour 1.48.0 all
boost tour 1.48.0 allboost tour 1.48.0 all
boost tour 1.48.0 all
 
Prosym2012
Prosym2012Prosym2012
Prosym2012
 
ラボユース最終成果報告会(Web公開版)
ラボユース最終成果報告会(Web公開版)ラボユース最終成果報告会(Web公開版)
ラボユース最終成果報告会(Web公開版)
 
Dive into RTS - another side
Dive into RTS - another sideDive into RTS - another side
Dive into RTS - another side
 
Python physicalcomputing
Python physicalcomputingPython physicalcomputing
Python physicalcomputing
 
C++14 Overview
C++14 OverviewC++14 Overview
C++14 Overview
 
PostgreSQL - C言語によるユーザ定義関数の作り方
PostgreSQL - C言語によるユーザ定義関数の作り方PostgreSQL - C言語によるユーザ定義関数の作り方
PostgreSQL - C言語によるユーザ定義関数の作り方
 
Boost.Coroutine
Boost.CoroutineBoost.Coroutine
Boost.Coroutine
 
8 並列計算に向けた pcセッティング
8 並列計算に向けた pcセッティング8 並列計算に向けた pcセッティング
8 並列計算に向けた pcセッティング
 
Objc lambda
Objc lambdaObjc lambda
Objc lambda
 
T69 c++cli ネイティブライブラリラッピング入門
T69 c++cli ネイティブライブラリラッピング入門T69 c++cli ネイティブライブラリラッピング入門
T69 c++cli ネイティブライブラリラッピング入門
 

Kürzlich hochgeladen

Kürzlich hochgeladen (11)

LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsUtilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native Integrations
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
 

Boost9 session