SlideShare une entreprise Scribd logo
1  sur  71
Télécharger pour lire hors ligne
Mulvery
CPU+FPGAプラットフォームのための
Rubyベースの開発環境(技術詳細)
2017年度 未踏事業 スーパークリエータ
まるさ
12018/05/10
自己紹介
まるさ(照屋大地)
2017年度未踏事業
スーパークリエータ
東京農工大学 工学府
博士後期課程
2018/05/10 2
ほとんど気づいてもら
えなかったけどロゴを
紋代わりにした
アジェンダ
1. Mulveryの概要ときっかけ
2. ReactiveXとハード合成のアイデア
3. 未踏での開発
• ハード合成の仕組みの試行錯誤
• ラムダ抽象の合成
• Schedulerの合成
• ソフト/ハードの連携
4. 余談
2018/05/10 3
マイコン Internet
きっかけ:IoTデバイス開発の課題
2018/05/10 4
多数の高速な
外部I/Oを扱いたい
センサデバイス
FPGA Internet
2018/05/10 5
内部の論理回路を自由に
組み換え可能なチップ
「処理のハードウェア化」
ネットワークに
接続したい
きっかけ:IoTデバイス開発の課題センサデバイス
マイ
コン
FPGA Internet
2018/05/10 6
多数の高速な
外部I/Oを扱いたい
ネットワークに
接続したい
CPU+FPGA環境
におけるシステム開発の簡略化がしたい!
きっかけ:IoTデバイス開発の課題センサデバイス
連携が面倒
“ぜんぶRubyだけでサクサク書きたい”
Mulveryプロジェクト
CPU
FPGA
Mulveryフレームワークとは?
2018/05/10 7
Internet
ソフトウェア
開発段階 開発するシステム
ハードウェア
Mulvery
フレームワーク
Ruby
ソースコード
ハード化対象を
自動で抽出
回路設計の
知識不要
セ
ン
サ
(
ア
ク
チ
ュ
エ
ー
タ
)
マイ
コン
FP
GA
Internet
2018/05/10 8
CPU+FPGA環境
におけるシステム開発の簡略化がしたい!
きっかけ:大量のマイクを扱いたいセンサ群
開発が
ちょっと面倒
扱いやすいけど
パワー不足
“ぜんぶRubyだけでサクサク書きたい”
Mulveryプロジェクト
連携が面倒
これまでに作ってきたもの
2018/05/10 9
高専ロボコン(’10~)
高専プロコン(‘11~)
Android開発(‘12~)
電気自動車ECU(‘13)
自律分散システム
(’15~)
FPGA開発支援環境
(’16~)
もっと早くFPGAに
気づけたら・・・
システムづくりデビュー
2018/05/10 10
賢く可視化、簡単節電
かしこん!!
(2012年度高専プロコン 自由部門)
通信+センシングは
つらい・・・
PLC
FPGA使えない
かなあ
メモリ
CPU
FPGA
2
デバイス
ドライバ
ソフトウェア
ソフトウェア
ソースコード群
ハードウェア
制約ファイル
ハードウェア
設計ファイル
ハードウェア
ソースコード群
Network
ソフトウェア
開発するシステム
ハードウェア
開発段階
これまでの再構成可能計算システム
課題1
幅広い知識が必要
2018/05/10
set_directive_pipeline
“Interface::get_data
/get_data_loop0”
高位合成とその複雑さ
• 高位合成(High Level Synthesis, HLS)
3
CやJava等の高級言語を,ハードウェア記述言語(HDL)
によるレジスタ転送レベル(RTL)設計に変換する技術
ビヘイビア
記述
(高級言語)
最適化
指示の記述
(専用命令)
高位合成系
RTL設計
(HDL)
シミュレータ
による評価
FPGA
課題2
「動作記述≠構造記述」
→HW技術者による最適化が必要
2018/05/10
CPU
FPGA
目指すところ
2018/05/10 13
Internet
ソフトウェア
開発段階 開発するシステム
ハードウェア
Mulvery
フレームワーク
mRuby
ソースコード
FPGAとの
つなぎ込み不要
回路の知識
不要
セ
ン
サ
(
ア
ク
チ
ュ
エ
ー
タ
)
CPU
FPGA
データ処理のアクセラレータにも
2018/05/10
Internet
ソフトウェア
開発するシステム
ハードウェア
ネットワーク接続,
データのパース・整形,
条件分岐の多い処理, ...
ストリームデータの
アグリゲーション, 操作,
並列処理, ...
14
HW-SW協調設計環境
15
• C/C++コードの一部をハードウェア化
• オフロード対象を明示的に指定する
Intel FPGA SDK
for OpenCL
2018/05/10
高速化のための
試行錯誤が必要
⇒HW技術者向け
軽量言語によるメタプログラミング
162018/05/10
CλaSH
(Haskell)(Scala)
• 軽量言語をドメイン固有言語(DSL)として用いる
• 生成されるHWを設計しておく必要がある
(ScalaもHaskellも強い静的型付けでHW合成しやすそう)
class Max2 extends Module {
val io = new Bundlw {
val x = UInt(INPUT, 8)
val y = UInt(INPUT, 8)
val z = UInt(OUTPUT, 8)}
io.z = Mux(io.x > io.y, io.x, io.y)
}
ハードウェア記述言語の
メタプログラミング
⇒HW技術者向け
マイコン+FPGAな環境?
Trenz Electronics社
“Zynqberry”
ラズパイみたい
なものもある!
マイコン+FPGAな
Raspberry Pi
互換ボード
172018/05/10
PythonでFPGAを便利に使うヤツ
2018/05/10
• ハードウェアをAPI的にPythonから呼び出せる
• SDK+ハードウェア
• ハードは専門家が作る
• DeepLearningや
リアルタイム画像処理
で遊べる こういうの
Rubyにもほしい!
18
ReactiveXと
ハード合成のアイデア
2018/05/10 19
Mulveryのアプローチ
2018/05/10 20
Reactive Programmin (RP)
「データストリーム」をオブジェクトとして扱う
プログラミングパラダイム
Reactive Programmingを用いたプログラムからの合成
Web開発
Web開発
Android開発
今回は
Rxを使ったコードを
速くする
ReactiveXとは
• Observer Pattern …
• LINQ …………………
• Scheduler ……………
2018/05/10 21
次の3つの要素を組み合わせて
データフローを記述してプログラムを作る
非同期の実現
操作クエリの実装
スケジューリング
Reactive Programmingの例
2018/05/10 22
time
map( event becomes 1 )
1 1 1 1
1 2 3 4
scan(+)
Source
map
scan
・データの到着回数を数える例:
Data Flow
Events
Observable
Observer Pattern
• Publish/Subscribeとも
• ObserverがSubjectを観察する
• RxではSubject=Observable
2018/05/10 23
ライブラリ側
ユーザ実装
イベントを
配信
イベントを
購読
Observer PatternとHW合成アイデア
2018/05/10 24
class Pin < SubjectBase
<pin_watcherの定義>
def notify(event)
@observers.each do |o|
o.onNotify(event)
end
end
end
Observer1
ハードウェア
Observer2
ハードウェア
…
pin_watcher
ハードウェア
Pin pin_0
pin_0.addObserver do |e|
<Observer1の定義>
end
pin_0.addObserver do |e|
<Observer2の定義>
end
LINQ
• Language-INtegrated Query
• データ列(DBとか)を操作するための標準クエリ
2018/05/10 25
ラムダ抽象の内容を各イベントに適用
図:Rxのページより
LINQ
• Language-INtegrated Query
• データ列(DBとか)を操作するための標準クエリ
2018/05/10 26
前に作ったデータとイベントのデータを使えるクエリ
図:Rxのページより
LINQ
• Language-INtegrated Query
• データ列(DBとか)を操作するための標準クエリ
2018/05/10 27
イベントをバッファして1つのイベントにする
図:Rxのページより
LINQ
• Language-INtegrated Query
• データ列(DBとか)を操作するための標準クエリ
2018/05/10 28
2つのデータフローを待ち合わせる
図:Rxのページより
LINQ
• Language-INtegrated Query
• データ列(DBとか)を操作するための標準クエリ
2018/05/10 29
一定時間後にイベントを発生させる
図:Rxのページより
LINQ on Reactive Extensions
2018/05/10 30
LINQとHW合成アイデア
2018/05/10 31
time
map( event becomes 1 )
1 1 1 1
1 2 3 4
scan(+)
Source
map HW
scan HW
・データの到着回数を数える例(再掲)
各HWは
HDLのテンプレート
から合成
Events
Observable
Scheduler
• 動作スレッドを制御するための仕組み
• たとえばTimerだと・・・
2018/05/10 32
o1 = Observable.timer(1) do
p “this is o1”
end
o2 = Observable.timer(1) do
p “this is o2”
end
Current
Thread
Local
Thread
Local
Thread
this is
o1
this is
o2
timer(len,
scheduler=DefaultScheduler)
使い方に応じてschedulerを変える
Scheduler
2018/05/10 33
m_th = LocalScheduler.new
o1 = Observable.timer(1, m_th) do
p “this is o1”
end
o2 = Observable.timer(1, m_th) do
p “this is o2”
end
Current
Thread
Local
Thread
this is
o1
this is
o2
• 同一スレッドで時間計測させる例
SchedulerBaseを使って
任意の戦略が実装可能
SchedulerとHW合成アイデア
2018/05/10 34
Current
Thread
Local
Thread
this is
o1
this is
o2
• 動的スケジューリングを制限すれば
そのままデータフローグラフとして扱えそう
Source
o1 HW
o2 HW
Current
Thread
HW
未踏での開発
2018/05/10 35
実装しなければならないもの
1. HW抽出機構
2. HW合成機構
3. ラムダ抽象の合成
4. Schedulerの合成
5. ソフト/ハード連携
2018/05/10 36
V1:静的解析による実装
• mRubyのフロントを使って合成系を実装
• トランスパイラのようなものを作る
2018/05/10 37
型推論機構の実装
• Observableを抽出したい
• Rx記述をハード、それ以外をソフトとして実行したい
• 動的型付け言語なので型推論が必要
2018/05/10 38
とりあえず
Observableと
数値型さえ
見つかればOK
静的解析による実装の問題
• mRubyのパーサの実装がイマイチだった
• ASTいじりたいのにメモリ解放の機構がない
• 自前で新しく作り足したAST操作機構がバグだらけ
• 結局mRubyにベッタリになってしまう
• 後々フロント/バックに分離したくても難しい
2018/05/10 39
V2:動的解析による実装
• 多段階計算を使った動的解析の実装への舵切り
• フレームワークとして提供するので
通常のRubyで合成も実行も全部できる
2018/05/10 40
ハード/ソフトの自動分割
41
I2C Bus A
groupBy
averag
e
averag
e
0x1234 0x5678
データフローグラフ
def initialize()
i2c_stream = Stream.new(I2C_BUS_A)
sensors = i2c_stream.group_by(2)
{ |d| d. sensor_ id }
for sensor in sensors do
@averages[sensor] =sensor.average(5)
end
end
def main()
for average in @averages do
p average[sensor].get_latest()
end
wait_ms(100)
end
ソフトウェア部ハードウェア部
sensors[A] Sensors[B]
averages[B]averages[A]
i2c_stream
Rxで書きにくい部分は
多く場合ソフト実行が速い
Rx記述⇒ハード それ以外⇒ソフト
ハード化
メモリに
マップ
2018/05/10
ハードウェア合成の例
2018/05/10 42
events = Stream.new(MIO::p0)
count = events
.map(){ |event| 1 }
.scan(){ |acc, x| acc + x }
Streamオブジェクトが
ハードウェアを生成する
ハードウェア合成の例
2018/05/10 43
events = Stream.new(MIO::p0)
count = events
.map(){ |event| 1 }
.scan(){ |acc, x| acc + x }
module S_0(p0);
…
endmodule
Streamオブジェクトが
ハードウェアを生成する
S_0.v
ハードウェア合成の例
2018/05/10 44
events = Stream.new(MIO::p0)
count = events
.map(){ |event| 1 }
.scan(){ |acc, x| acc + x }
module S_0(p0);
…
Map_0 map_0(
.din(w_0_0),
.v_din(v_w_0_0),
.dout(w_0_1),
.v_dout(v_w_0_1));
endmodule
module Map_0(…);
…
dout <= 8’d1;
v_din <= 1’b1;
…
endmodule
Streamオブジェクトが
ハードウェアを生成する
Map_0.vS_0.v
テンプレート
から生成
ハードウェア合成の例
2018/05/10 45
events = Stream.new(MIO::p0)
count = events
.map(){ |event| 1 }
.scan(){ |acc, x| acc + x }
module S_0(p0);
…
Map_0 map_0(
.din(w_0_0),
.v_din(v_w_0_0),
.dout(w_0_1),
.v_dout(v_w_0_1));
Scan_0 scan_0(
…
endmodule
module Map_0(…);
…
dout <= 8’d1;
v_din <= 1’b1;
…
endmodule
Streamオブジェクトが
ハードウェアを生成する
module Scan_0(…);
…
endmodule
Scan_0.v
Map_0.vS_0.v
ハードウェア合成の例
2018/05/10 46
events = Stream.new(MIO::p0)
count = events
.map(){ |event| 1 }
.scan(){ |acc, x| acc + x }
module S_0(p0);
…
Map_0 map_0(
.din(w_0_0),
.v_din(v_w_0_0),
.dout(w_0_1),
.v_dout(v_w_0_1));
Scan_0 scan_0(
…
endmodule
module Map_0(…);
…
dout <= 8’d1;
v_din <= 1’b1;
…
endmodule
Streamオブジェクトが
ハードウェアを生成する
module Scan_0(…);
…
endmodule
Scan_0.v
Map_0.vS_0.v
他にも・・・
・Topモジュール
・計算カーネル
etc…
実装しなければならないもの
1. HW抽出機構
2. HW合成機構
3. ラムダ抽象の合成
4. Schedulerの合成
5. ソフト/ハード連携
2018/05/10 47
✔
✔
ラムダ抽象の合成について
• LINQクエリの多くは高階関数
• ラムダ抽象の合成はどうしよう・・・
⇒現状は用途に合わせた
多段階計算で誤魔化している
2018/05/10 48
サンプル:畳み込み演算
• 128x128の画像に対するラプラシアンフィルタ適用
2018/05/10 49
∗ =
…
128画素
(1行)
…
…
…
…
…
入力バッファ 5行バッファ 畳み込みx128
…
128画素
(1行)
result
コーディング例
2018/05/10 50
buffer = input.sliding_buffer(5)
line = buffer.map(){ |data|
mats = Array.new()
for i in (0…SIZE) do
mats.push(Matrix[data[0][i, 5], ¥
data[1][i, 5], ¥
data[2][i, 5], ¥
data[3][i, 5], ¥
data[4][i, 5]])
end
result_row = Array.new()
mats.map() do |mat|
result_row.push(mat.conv(kernel))
end
}
result = line.buffer(128)
input
sliding_
buffer
map
buffer
5行ぶん待つ
5行毎に処理(畳み込み)
128行出力待つ
コーディング例
2018/05/10 51
buffer = input.sliding_buffer(5)
line = buffer.map(){ |data|
mats = Array.new()
for i in (0…SIZE) {
mats.push(Matrix[data[0][i, 5], ¥
data[1][i, 5], ¥
data[2][i, 5], ¥
data[3][i, 5], ¥
data[4][i, 5]])
}
result_row = Array.new()
mats.map() { |mat|
result_row.push(mat.conv(kernel))
}
}
result = line.buffer(128)
ラムダ抽象をメタプロ的に扱う
2018/05/10 52
buffer = input.sliding_buffer(5)
line = buffer.map(){ |data|
mats = Array.new()
for i in (0…SIZE) {
mats.push(Matrix[data[0][i, 5], ¥
data[1][i, 5], ¥
data[2][i, 5], ¥
data[3][i, 5], ¥
data[4][i, 5]])
}
result_row = Array.new()
mats.map() { |mat|
result_row.push(mat.conv(kernel))
}
}
result = line.buffer(128)
data
mats
Array, Matrixは
オーバーロード
されている
ラムダ抽象をメタプロ的に扱う
2018/05/10 53
buffer = input.sliding_buffer(5)
line = buffer.map(){ |data|
mats = Array.new()
for i in (0…SIZE) {
mats.push(Matrix[data[0][i, 5], ¥
data[1][i, 5], ¥
data[2][i, 5], ¥
data[3][i, 5], ¥
data[4][i, 5]])
}
result_row = Array.new()
mats.map() { |mat|
result_row.push(mat.conv(kernel))
}
}
result = line.buffer(128)
data
mats
mat
kernel
result_
row
(convolution)
IF文のハードウェア化
2018/05/10 54
line = buffer.map(){ |data|
check(data == 0) {
do_something_1()
}
.elsewhen(data == 1) {
do_something_2()
}
.otherwise {
do_something_3()
}
.endcheck
}
check
CheckContext#elsewhen
CheckContext#otherwise
CheckContext#endcheck
ハード合成時:すべて評価
ソフト実行時:IFとおなじ
実装しなければならないもの
1. HW抽出機構
2. HW合成機構
3. ラムダ抽象の合成
4. Schedulerの合成
5. ソフト/ハード連携
2018/05/10 55
✔
✔
✔
LocalThread_0
Schedulerの合成
2018/05/10 56
Current
Thread
Local
Thread
this is
o1
this is
o2
• Thread毎にステートマシンを持つ
• CurrentThreadはかならずできる
o1 HW
o2 HW
CurrentThread
Current
Thread
HW
Schedulerの合成の問題
• 複数のThreadを同時にキックしたい場合
(未解決)
2018/05/10 57
o1 = Observable.timer(1) do
p “this is o1”
end
o2 = Observable.timer(1) do
p “this is o2”
end
Current
Thread
Local
Thread
Local
Thread
this is
o1
this is
o2
違うstateで
キックしてしまう
実装しなければならないもの
1. HW抽出機構
2. HW合成機構
3. ラムダ抽象の合成
4. Schedulerの合成
5. ソフト/ハード連携
2018/05/10 58
✔
✔
✔
✔
ソフト/ハード自動連携
• 現状はかなり素朴な実装
• 共有メモリでデータ共有のみ
2018/05/10 59
I2C Bus A
groupBy
averag
e
averag
e
0x1234 0x5678
データフローグラフ
sensors[A] Sensors[B]
averages[B]averages[A]
i2c_stream
ハード化
メモリに
マップ
ユーザアプリ(Ruby)
Ruby拡張
(C言語)
Debian
OS管理
メモリ
OS管理外
メモリ
メモリアクセス機構
Ruby
ライブラリ
Mulvery合成回路
外部I/O
Processing
System
Programmable
Logic
実装しなければならないもの
1. HW抽出機構
2. HW合成機構
3. ラムダ抽象の合成
4. Schedulerの合成
5. ソフト/ハード連携
2018/05/10 60
✔
✔
✔
✔
✔
Mulveryの
楽しいところ
2018/05/10 61
これまでのハードウェアオフロード
2018/05/10 62
__kernel void func(
__global int *data){ ... }
・オフロードする関数を指定する必要
・オフロードした関数はFPGA上で実行
Intel FPGA SDK
for OpenCL
透過性の高い記述
2018/05/10 63
def func(data)
…
end
stream_1 = Stream.new()
grouped_stream_1 = stream_1.group_by{|d| func(d)}
array_1 = [1, 2, 3, 4, 5, 6]
grouped_array_1 = array_1.group_by{|d| func(d)}
非Stream:
CPUで実行
Stream:
FPGAで実行
データに近い場所で処理が行われる
透過性の高い記述
透過性の高い記述の例2
2018/05/10 64
i2c_stream = Stream.new(I2C_BUS_A)
sensors = i2c_stream.group_by(2)
{ |d| d. sensor_ id }
averages = sensors.map{ |key, val|
[key, sensor.average(5)]
}.to_h()
I2C Bus A
i2c_stream
groupBy
average average
sensors[A] Sensors[B]
averages[B]averages[A]
同じメソッドが「ソフトウェア記述」
「ハードウェア記述」「generator文」の3役を果たす
⇒ハードにもソフトにもならないmap
デバイスコントローラとしての活用
65
1024個のフルカラーLED(NeoPixel)を制御してみる
マイコン
Web
Server
FPGA
LED制御
LED
マトリクス
マイコンだと
アセンブリが必要
akiba LED ピカリ館さんにて
1000個!?
一度にまとめて
動かせるんですか!?
1.25us信号
x24x1024
2018/05/10
Rubyの資産を使って
システム実装できる
用途の検討
工場IoTで使えるかも
⇒データアグリゲーションしたい
⇒でもオペレーションでFPGAは
触りたくない・・・
車やロボは難しい
⇒必ずプロがチューニング
66
プロユースと汎用マイコン
の境目にマーケット?
FPGAベンダのXilinx社を訪問
2018/05/10
余談
2018/05/10 67
ところで・・・
合宿の時:
68
Twitterでは:
micropython
mruby
Pythonのほうがよいかも?
2018/05/10
なぜRubyなのか
69
Rubyの方が見た目が好みだったから
events = Stream.from_pin(MIO::p0)
t = events.map(lambda event: 1)
count = t.scan(lambda acc, x: acc + x)
VS
Python
・Method chainがしにくい
・ブロックが渡せない
⇒ちょっとイマイチ
events = Stream.from_pin(MIO::p0)
count = events
.map(){ |event| 1 }
.scan(){ |acc, x| acc + x }
Ruby
・Method chainできる
・ラムダ抽象をブロックで
⇒かっこいい!
2018/05/10
(でも)今後はPythonにも展開していきたい
自動テストの話
• RSpec+自作テスタ on Travis CI
2018/05/10 70
RSpecを用いた
各メソッド単体テスト
makefileから
テストハードの合成
Icarus Verilogで
テストハードの動作検証
Vivadoでテストハードの
配置配線が通るかテスト
on 自宅サーバ
712018/05/10

Contenu connexe

Similaire à Mulvery技術詳細

Similaire à Mulvery技術詳細 (20)

IoT Cyber Security Counter Measurement
IoT Cyber Security Counter MeasurementIoT Cyber Security Counter Measurement
IoT Cyber Security Counter Measurement
 
HBaseとSparkでセンサーデータを有効活用 #hbasejp
HBaseとSparkでセンサーデータを有効活用 #hbasejpHBaseとSparkでセンサーデータを有効活用 #hbasejp
HBaseとSparkでセンサーデータを有効活用 #hbasejp
 
JAWS DAYS 2018 | IoT時代におけるデバイスのファームウェアとクラウドのいい関係
JAWS DAYS 2018 | IoT時代におけるデバイスのファームウェアとクラウドのいい関係JAWS DAYS 2018 | IoT時代におけるデバイスのファームウェアとクラウドのいい関係
JAWS DAYS 2018 | IoT時代におけるデバイスのファームウェアとクラウドのいい関係
 
Iot algyan jhirono 20190111
Iot algyan jhirono 20190111Iot algyan jhirono 20190111
Iot algyan jhirono 20190111
 
ONIC2017 プログラマブル・データプレーン時代に向けた ネットワーク・オペレーションスタック
ONIC2017 プログラマブル・データプレーン時代に向けた ネットワーク・オペレーションスタックONIC2017 プログラマブル・データプレーン時代に向けた ネットワーク・オペレーションスタック
ONIC2017 プログラマブル・データプレーン時代に向けた ネットワーク・オペレーションスタック
 
Decsx launcherv 2.5
Decsx launcherv 2.5Decsx launcherv 2.5
Decsx launcherv 2.5
 
Logic Apps/Flow Update Summary
Logic Apps/Flow Update SummaryLogic Apps/Flow Update Summary
Logic Apps/Flow Update Summary
 
red-hat-forum-2017-openshift-baremetal-deployment
red-hat-forum-2017-openshift-baremetal-deploymentred-hat-forum-2017-openshift-baremetal-deployment
red-hat-forum-2017-openshift-baremetal-deployment
 
Fundamentals of Swift & Redux (ReduxとSwiftの組み合わせ)
Fundamentals of Swift & Redux (ReduxとSwiftの組み合わせ)Fundamentals of Swift & Redux (ReduxとSwiftの組み合わせ)
Fundamentals of Swift & Redux (ReduxとSwiftの組み合わせ)
 
Interop2019 Toyota Netcope P4
Interop2019 Toyota Netcope P4Interop2019 Toyota Netcope P4
Interop2019 Toyota Netcope P4
 
CDS が DirectQuery をサポートしたのでそれを紹介しながら新機能を紹介していきます
CDS が DirectQuery をサポートしたのでそれを紹介しながら新機能を紹介していきますCDS が DirectQuery をサポートしたのでそれを紹介しながら新機能を紹介していきます
CDS が DirectQuery をサポートしたのでそれを紹介しながら新機能を紹介していきます
 
ASP.NET vNext / Visual Studio "14" に見る .NET の未来像
ASP.NET vNext / Visual Studio "14" に見る .NET の未来像ASP.NET vNext / Visual Studio "14" に見る .NET の未来像
ASP.NET vNext / Visual Studio "14" に見る .NET の未来像
 
Microsoft AI Platform
Microsoft AI PlatformMicrosoft AI Platform
Microsoft AI Platform
 
Preview: 世界中のゲーム分析をしてきたPlayFabが大進化!一緒に裏側の最新データ探索の仕組みを覗いてみよう
Preview: 世界中のゲーム分析をしてきたPlayFabが大進化!一緒に裏側の最新データ探索の仕組みを覗いてみようPreview: 世界中のゲーム分析をしてきたPlayFabが大進化!一緒に裏側の最新データ探索の仕組みを覗いてみよう
Preview: 世界中のゲーム分析をしてきたPlayFabが大進化!一緒に裏側の最新データ探索の仕組みを覗いてみよう
 
【de:code 2020】 Azure Synapse Analytics 技術編 ~ 最新の統合分析プラットフォームによる新しい価値の創出(後編)
【de:code 2020】 Azure Synapse Analytics 技術編 ~ 最新の統合分析プラットフォームによる新しい価値の創出(後編)【de:code 2020】 Azure Synapse Analytics 技術編 ~ 最新の統合分析プラットフォームによる新しい価値の創出(後編)
【de:code 2020】 Azure Synapse Analytics 技術編 ~ 最新の統合分析プラットフォームによる新しい価値の創出(後編)
 
PostgreSQLのgitレポジトリから見える2022年の開発状況(第38回PostgreSQLアンカンファレンス@オンライン 発表資料)
PostgreSQLのgitレポジトリから見える2022年の開発状況(第38回PostgreSQLアンカンファレンス@オンライン 発表資料)PostgreSQLのgitレポジトリから見える2022年の開発状況(第38回PostgreSQLアンカンファレンス@オンライン 発表資料)
PostgreSQLのgitレポジトリから見える2022年の開発状況(第38回PostgreSQLアンカンファレンス@オンライン 発表資料)
 
Dapr × Kubernetes ではじめるポータブルなマイクロサービス(CloudNative Days Tokyo 2020講演資料)
Dapr × Kubernetes ではじめるポータブルなマイクロサービス(CloudNative Days Tokyo 2020講演資料)Dapr × Kubernetes ではじめるポータブルなマイクロサービス(CloudNative Days Tokyo 2020講演資料)
Dapr × Kubernetes ではじめるポータブルなマイクロサービス(CloudNative Days Tokyo 2020講演資料)
 
OSC2013 Tokyo/Spring JOSUG
OSC2013 Tokyo/Spring JOSUGOSC2013 Tokyo/Spring JOSUG
OSC2013 Tokyo/Spring JOSUG
 
PyConAPAC2023 ワークフローエンジン Apache Airflowを用いた 大規模データパイプライン構築と改善
PyConAPAC2023 ワークフローエンジン  Apache Airflowを用いた 大規模データパイプライン構築と改善PyConAPAC2023 ワークフローエンジン  Apache Airflowを用いた 大規模データパイプライン構築と改善
PyConAPAC2023 ワークフローエンジン Apache Airflowを用いた 大規模データパイプライン構築と改善
 
メルペイあと払いを実現するData Pipeline
メルペイあと払いを実現するData Pipelineメルペイあと払いを実現するData Pipeline
メルペイあと払いを実現するData Pipeline
 

Plus de Daichi Teruya (6)

iMulvery -Mulveryの新機能のご紹介-
iMulvery -Mulveryの新機能のご紹介-iMulvery -Mulveryの新機能のご紹介-
iMulvery -Mulveryの新機能のご紹介-
 
Mulvery Detail - English
Mulvery Detail - EnglishMulvery Detail - English
Mulvery Detail - English
 
IoTLT17
IoTLT17IoTLT17
IoTLT17
 
2017年度未踏事業最終成果報告
2017年度未踏事業最終成果報告2017年度未踏事業最終成果報告
2017年度未踏事業最終成果報告
 
(Lambdaだけで) 純LISPのような ナニかを作る
(Lambdaだけで)純LISPのようなナニかを作る(Lambdaだけで)純LISPのようなナニかを作る
(Lambdaだけで) 純LISPのような ナニかを作る
 
Mado magisystemx hago3
Mado magisystemx hago3Mado magisystemx hago3
Mado magisystemx hago3
 

Mulvery技術詳細