SlideShare ist ein Scribd-Unternehmen logo
1 von 20
Polyphony IO まとめ
シンビー社内資料
2017/3/31
ケース1
Zynq から RPC
Testbench 主導開発
Python 関数Python 関数
(testbench)
def sum(a, b, c):
return a * b + c
@testbench
def test():
r = sum(1, 2, 3)
print(r)
test()
I/F
Polyphony が Python への
道を開いてくれる
Python 関数Python 関数
(testbench)
def sum(a, b, c):
return a * b + c
@testbench
def test():
r = sum(1, 2, 3)
print(r)
test()
主に CPU からの RPC 的な使用法を想定している
Polyphonyが生成した
Verilog のI/Fの意味
I/F
msgpack-RPC Server
最終形はこれ
Python
関数
IO
AXI
AXIバス
CPU
AXI
Linux
ドライバ
msgpack-RPC Client
Python
Msgpack
RPC
Pythonアプリケーション
ケース2
IO を扱う
Python
Polyphony IO
SPI
IO
I/F
Python
Polyphony が SPI を IO ごとラップ
SPI
IO
主に SPI などの IO をラッピングしてくれる
I/F
Python
反対側の IF はどうする?
SPI
IO
?
Verilog
Python
処理の本質とIOをきれいに分離
SPI
IO
?
本
質
IO との
きれいな分離
I/F
Python
Standalone タイプ
SPI
IO
Python のコードは橋渡し的になる
Python が能動的にメモリをアクセス
IO
Memory
I/F
Python
IoT タイプ
SPI
IO
Python のコードは橋渡し的になる
CPU からは SPI や I2C に見える
IO
CPU
SPI
or
I2C
I/F
Python
関数(RPC)タイプ(というのはない)
SPI
IO
Zynq などのARM CPU から SPI を
ラッピングしているように見える
CPU
AXIバス
ケース3
フィルタ
フィルターアプリをPython で
フィルターアプリ
@worker
def woker_func1():
…
@worker
def woker_func2():
…
Que
IOQueue
IOQueue
I/F
Verilog
AXIS
他のモジュールと連携
フィルターアプリ
@worker
def woker_func1():
…
@worker
def woker_func2():
…
Que
IOQueue
IOQueue
Verilog
AXIS
ケース4
研究の人たちが使いたいパターン
I/F
msgpack-RPC Server
これに近い
Python
関数
IO
AXI
AXIバス
CPU
AXI
Linux
ドライバ
msgpack-RPC Client
Python
Msgpack
RPC
Pythonアプリケーション
バースト的にメモリから情報をとる
I/F
msgpack-RPC Server
Python
関数
IOIOQueue
IOQueue
Memory
@worker
AXIバス
CPU
Memory
@worker
疑似コード
reg_woker_to_kick_me = Reg()
memory_IO_0 = IO_Queue()
memory_IO_1 = IO_Queue()
memory_IO_2 = IO_Queue()
def kick_me(para_a, para_b, para_c):
kick_worker() # ワーカーを起動
wait_worker() # ワーカー終了待ち
return reg_woker_to_kick_me
@worker
def multiple_worker():
flag = True
n = 0
while ( flag ):
(data_0, user_0, last_0) = memory_IO_0.pull()
(data_1, user_1, last_1) = memory_IO_1.pull()
n += 1
if ( last_0 == 1 ) :
assert(last_1 == 1)
flag = False
data_result = data_0 * data_1
memory_IO_2.push((data_result, user_0, user1))
reg_worker_to_kick_me.value = n
finish_worker()

Weitere ähnliche Inhalte

Was ist angesagt?

PyCon2020 Pythonで競プロをしよう! 〜入門者が知っておくべき高速化Tips〜
PyCon2020 Pythonで競プロをしよう! 〜入門者が知っておくべき高速化Tips〜PyCon2020 Pythonで競プロをしよう! 〜入門者が知っておくべき高速化Tips〜
PyCon2020 Pythonで競プロをしよう! 〜入門者が知っておくべき高速化Tips〜
Kosaku Ono
 
Boost.python
Boost.pythonBoost.python
Boost.python
fate_fox
 
配管流路の多目的最適化OpenFOAM+OpenMDAO(第28回オープンCAE勉強会@関西)
配管流路の多目的最適化OpenFOAM+OpenMDAO(第28回オープンCAE勉強会@関西)配管流路の多目的最適化OpenFOAM+OpenMDAO(第28回オープンCAE勉強会@関西)
配管流路の多目的最適化OpenFOAM+OpenMDAO(第28回オープンCAE勉強会@関西)
TatsuyaKatayama
 
Pythonの処理系はどのように実装され,どのように動いているのか? 我々はその実態を調査すべくアマゾンへと飛んだ.
Pythonの処理系はどのように実装され,どのように動いているのか? 我々はその実態を調査すべくアマゾンへと飛んだ.Pythonの処理系はどのように実装され,どのように動いているのか? 我々はその実態を調査すべくアマゾンへと飛んだ.
Pythonの処理系はどのように実装され,どのように動いているのか? 我々はその実態を調査すべくアマゾンへと飛んだ.
kiki utagawa
 

Was ist angesagt? (20)

C#勉強会
C#勉強会C#勉強会
C#勉強会
 
NumPyが物足りない人へのCython入門
NumPyが物足りない人へのCython入門NumPyが物足りない人へのCython入門
NumPyが物足りない人へのCython入門
 
言語処理系入門€10
言語処理系入門€10言語処理系入門€10
言語処理系入門€10
 
PyCon2020 Pythonで競プロをしよう! 〜入門者が知っておくべき高速化Tips〜
PyCon2020 Pythonで競プロをしよう! 〜入門者が知っておくべき高速化Tips〜PyCon2020 Pythonで競プロをしよう! 〜入門者が知っておくべき高速化Tips〜
PyCon2020 Pythonで競プロをしよう! 〜入門者が知っておくべき高速化Tips〜
 
Cython intro prelerease
Cython intro prelereaseCython intro prelerease
Cython intro prelerease
 
Python physicalcomputing
Python physicalcomputingPython physicalcomputing
Python physicalcomputing
 
20170131 python3 6 PEP526
20170131 python3 6 PEP526 20170131 python3 6 PEP526
20170131 python3 6 PEP526
 
LLdeade Python Language Update
LLdeade Python Language UpdateLLdeade Python Language Update
LLdeade Python Language Update
 
Boost.python
Boost.pythonBoost.python
Boost.python
 
C++14 Overview
C++14 OverviewC++14 Overview
C++14 Overview
 
C++による数値解析の並列化手法
C++による数値解析の並列化手法C++による数値解析の並列化手法
C++による数値解析の並列化手法
 
PEP8を読んでみよう
PEP8を読んでみようPEP8を読んでみよう
PEP8を読んでみよう
 
研究生のためのC++ no.7
研究生のためのC++ no.7研究生のためのC++ no.7
研究生のためのC++ no.7
 
Introduction to NumPy & SciPy
Introduction to NumPy & SciPyIntroduction to NumPy & SciPy
Introduction to NumPy & SciPy
 
2017/12/21 虎の穴 Python勉強会
2017/12/21 虎の穴 Python勉強会2017/12/21 虎の穴 Python勉強会
2017/12/21 虎の穴 Python勉強会
 
配管流路の多目的最適化OpenFOAM+OpenMDAO(第28回オープンCAE勉強会@関西)
配管流路の多目的最適化OpenFOAM+OpenMDAO(第28回オープンCAE勉強会@関西)配管流路の多目的最適化OpenFOAM+OpenMDAO(第28回オープンCAE勉強会@関西)
配管流路の多目的最適化OpenFOAM+OpenMDAO(第28回オープンCAE勉強会@関西)
 
Pythonを用いた高水準ハードウェア設計環境の検討
Pythonを用いた高水準ハードウェア設計環境の検討Pythonを用いた高水準ハードウェア設計環境の検討
Pythonを用いた高水準ハードウェア設計環境の検討
 
研究生のためのC++ no.2
研究生のためのC++ no.2研究生のためのC++ no.2
研究生のためのC++ no.2
 
Pythonの処理系はどのように実装され,どのように動いているのか? 我々はその実態を調査すべくアマゾンへと飛んだ.
Pythonの処理系はどのように実装され,どのように動いているのか? 我々はその実態を調査すべくアマゾンへと飛んだ.Pythonの処理系はどのように実装され,どのように動いているのか? 我々はその実態を調査すべくアマゾンへと飛んだ.
Pythonの処理系はどのように実装され,どのように動いているのか? 我々はその実態を調査すべくアマゾンへと飛んだ.
 
Coq 20100208a
Coq 20100208aCoq 20100208a
Coq 20100208a
 

Ähnlich wie Polyphony IO まとめ

Using PyFoam as library(第25回オープンCAE勉強会@関西)
Using PyFoam as library(第25回オープンCAE勉強会@関西)Using PyFoam as library(第25回オープンCAE勉強会@関西)
Using PyFoam as library(第25回オープンCAE勉強会@関西)
TatsuyaKatayama
 
PythonistaがOCamlを実用する方法
PythonistaがOCamlを実用する方法PythonistaがOCamlを実用する方法
PythonistaがOCamlを実用する方法
Yosuke Onoue
 

Ähnlich wie Polyphony IO まとめ (20)

Rの高速化
Rの高速化Rの高速化
Rの高速化
 
Using PyFoam as library(第25回オープンCAE勉強会@関西)
Using PyFoam as library(第25回オープンCAE勉強会@関西)Using PyFoam as library(第25回オープンCAE勉強会@関西)
Using PyFoam as library(第25回オープンCAE勉強会@関西)
 
Pyconjp2014_implementations
Pyconjp2014_implementationsPyconjp2014_implementations
Pyconjp2014_implementations
 
Subprocess no susume
Subprocess no susumeSubprocess no susume
Subprocess no susume
 
ひのきのぼうだけで全クリ目指す
ひのきのぼうだけで全クリ目指すひのきのぼうだけで全クリ目指す
ひのきのぼうだけで全クリ目指す
 
Fab
FabFab
Fab
 
Pythonはどうやってlen関数で長さを手にいれているの?
Pythonはどうやってlen関数で長さを手にいれているの?Pythonはどうやってlen関数で長さを手にいれているの?
Pythonはどうやってlen関数で長さを手にいれているの?
 
PostgreSQLとpython
PostgreSQLとpythonPostgreSQLとpython
PostgreSQLとpython
 
PythonistaがOCamlを実用する方法
PythonistaがOCamlを実用する方法PythonistaがOCamlを実用する方法
PythonistaがOCamlを実用する方法
 
「Python言語」はじめの一歩 / First step of Python / 2016 Jan 12
「Python言語」はじめの一歩 / First step of Python / 2016 Jan 12「Python言語」はじめの一歩 / First step of Python / 2016 Jan 12
「Python言語」はじめの一歩 / First step of Python / 2016 Jan 12
 
GPU-FPGA 協調計算を記述するためのプログラミング環境に関する研究(HPC169 No.10)
GPU-FPGA 協調計算を記述するためのプログラミング環境に関する研究(HPC169 No.10)GPU-FPGA 協調計算を記述するためのプログラミング環境に関する研究(HPC169 No.10)
GPU-FPGA 協調計算を記述するためのプログラミング環境に関する研究(HPC169 No.10)
 
サイバーエージェントにおけるMLOpsに関する取り組み at PyDataTokyo 23
サイバーエージェントにおけるMLOpsに関する取り組み at PyDataTokyo 23サイバーエージェントにおけるMLOpsに関する取り組み at PyDataTokyo 23
サイバーエージェントにおけるMLOpsに関する取り組み at PyDataTokyo 23
 
20130315 abc firefox_os
20130315 abc firefox_os20130315 abc firefox_os
20130315 abc firefox_os
 
Introduction of Python
Introduction of PythonIntroduction of Python
Introduction of Python
 
20130316 プログラミング言語Go
20130316 プログラミング言語Go20130316 プログラミング言語Go
20130316 プログラミング言語Go
 
イベント駆動プログラミングとI/O多重化
イベント駆動プログラミングとI/O多重化イベント駆動プログラミングとI/O多重化
イベント駆動プログラミングとI/O多重化
 
How to run P4 BMv2
How to run P4 BMv2How to run P4 BMv2
How to run P4 BMv2
 
Functional Way
Functional WayFunctional Way
Functional Way
 
cs-10. Python の基礎(オブジェクト,メソッド,引数,文字列)
cs-10. Python の基礎(オブジェクト,メソッド,引数,文字列) cs-10. Python の基礎(オブジェクト,メソッド,引数,文字列)
cs-10. Python の基礎(オブジェクト,メソッド,引数,文字列)
 
「Python言語」はじめの一歩 / First step of Python
「Python言語」はじめの一歩 / First step of Python「Python言語」はじめの一歩 / First step of Python
「Python言語」はじめの一歩 / First step of Python
 

Mehr von ryos36

Mehr von ryos36 (16)

Pycairo を使ってみる その1
Pycairo を使ってみる その1Pycairo を使ってみる その1
Pycairo を使ってみる その1
 
ストーリーとは
ストーリーとはストーリーとは
ストーリーとは
 
CNN でテニス選手の動きを解析する
CNN でテニス選手の動きを解析するCNN でテニス選手の動きを解析する
CNN でテニス選手の動きを解析する
 
Polyphony 新機能ツアー
Polyphony 新機能ツアーPolyphony 新機能ツアー
Polyphony 新機能ツアー
 
Stellaris を使った組み込みアプリ開発ガイド
Stellaris を使った組み込みアプリ開発ガイドStellaris を使った組み込みアプリ開発ガイド
Stellaris を使った組み込みアプリ開発ガイド
 
研究者のための Python による FPGA 入門
研究者のための Python による FPGA 入門研究者のための Python による FPGA 入門
研究者のための Python による FPGA 入門
 
PYNQ 祭り: Pmod のプログラミング
PYNQ 祭り: Pmod のプログラミングPYNQ 祭り: Pmod のプログラミング
PYNQ 祭り: Pmod のプログラミング
 
SDSoC でストリーム
SDSoC でストリームSDSoC でストリーム
SDSoC でストリーム
 
Analog Devices の IP コアを使う
Analog Devices の IP コアを使うAnalog Devices の IP コアを使う
Analog Devices の IP コアを使う
 
SDSoC と Vivado
SDSoC と VivadoSDSoC と Vivado
SDSoC と Vivado
 
高速化のポイント
高速化のポイント高速化のポイント
高速化のポイント
 
20周遅れ
20周遅れ20周遅れ
20周遅れ
 
90分 Scheme to C(勝手に抄訳版)
90分 Scheme to C(勝手に抄訳版)90分 Scheme to C(勝手に抄訳版)
90分 Scheme to C(勝手に抄訳版)
 
並列計算への道 2015年版
並列計算への道 2015年版並列計算への道 2015年版
並列計算への道 2015年版
 
NiosII と RTOS について
NiosII と RTOS についてNiosII と RTOS について
NiosII と RTOS について
 
Synthesijer で作るFORTH仮想マシン
Synthesijer で作るFORTH仮想マシンSynthesijer で作るFORTH仮想マシン
Synthesijer で作るFORTH仮想マシン
 

Polyphony IO まとめ

Hinweis der Redaktion

  1. もともとの Polyphony のスタイル。Testbench が トップモジュールを規定してくれる。
  2. Polyphony は Verilog を作ってくれる。 ソフトウェアエンジニア的には Verilog かどうかはあまり気にならない。 Python の関数を FPGA がわかるようにラップしてくれて CPU から RPC 的に使えるというイメージ
  3. 最終形態はこれ mesgpack RPC でさらに Python でラップして ORB になるとベスト。 ORB になると FPGA 側に状態を覚えておいてほしいというのはある。 ORB は Python の話なので割愛。
  4. Polyphony IO を使うとSPI の細かいインタフェースを使えるようになる。
  5. Python 利用者から見ると SPI をラップしてくれる I/F に見える 上の絵は Python をラップしているように見えるが、、、、
  6. これだけだとSPIから来た情報を外に出せなないので、なんらかの I/F が必要
  7. なんらかの I/F との中心になにか本質(たとえばローパスフィルターとか) があればそれは切り出されて分離可能になるべき しかしそれがどのように実現できるかはまだ私が勉強不足
  8. CNN やマトリックス演算では情報をバースト的にとる必要がある。 AXI バス経由(これは Zynq の都合)でとる必要があるかもしれないし FPGA に繋がっているメモリ(上の図の右側)からとる必要があるかもしれない。