狠狠撸

狠狠撸Share a Scribd company logo
数値計算のための
Python + FPGA(構想編)
Polyphony による高位合成の応用
Python 関数Python 関数
(testbench)
def sum(a, b, c):
return a * b + c
@testbench
def test():
r = sum(1, 2, 3)
print(r)
test()
関数コール(行きと戻り)
Python 関数Python 関数
(testbench)
def sum(a, b, c):
return a * b + c
@testbench
def test():
r = sum(1, 2, 3)
print(r)
test()
ready
data
data
valid
accept
現在の Polyphony の規約により状態は持てない
数値計算
転送時間が長いとメリット無し
CPU でやってみました FPGA でやってみました
Ready + Data
実際の計算
Valid + Data
+ accept
数値計算
実際の計算
数値計算
長い計算がいいはず
CPU でやってみました FPGA でやってみました
Ready + Data
実際の計算
Valid + Data
+ accept
数値計算
実際の計算
実際の計算
実際の計算
実際の計算
並列化
行列計算とか?
Python 関数Python 関数
(testbench)
def mul(r, a, b):
set_que(a)
set_que(b)
set_que(r)
stat = kick_worker()
return stat
@testbench
def test():
m_a=mmap([0] * 1000)
data_set(m_a)
m_b=mmap([0] * 1000)
data_set(m_b)
m_r=mmap([0] * 1000)
stat = mul(m_r, m_b, m_a)
wait_mul(stat)
print(m_r)
test()
def mul_worker():
while worker_is_running():
a = que_a.rd()
b = que_a.rd()
r = a * b
r = que_a.wr(r)
n += 1
if n == 1000:
break
Just Idea:
パイプライン
化はworker
の中だけ?
で十分?
できればこんなことは書きたくない
簡単な構文シュガーがあるとよい
Python 関数Python 関数
(testbench)
mul_obj =
SugoiModule(lambda a, b : a * b)
@testbench
def test():
m_a=mmap([0] * 1000)
data_set(m_a)
m_b=mmap([0] * 1000)
data_set(m_b)
m_r=mmap([0] * 1000)
stat = mul_obj(m_r, m_b, m_a)
wait_mul(stat)
print(m_r)
test()
できる回路は
Memory FIFO
Memory FIFO
掛算 MemoryFIFO
PI の計算とか
Python 関数Python 関数
(testbench)
def set_work_area(tmp, r):
…..
doPI():
stat0= kick_pi0()
stat1 = kick_pi1()
return (stat0, stat1)
def procedure_PI():
….
….
@testbench
def test():
m_tmp0=mmap([0] * 10000)
m_r0=mmap([0] * 10000)
set_work_area0(m_tm0, m_r0)
m_tmp1=mmap([0] * 10000)
m_r1=mmap([0] * 10000)
set_work_area1(m_tm1, m_r1)
stat = doPI()
wait_mul(stat)
pi = getPI(m_r0, m_r1)
print(pi)
test()
できる回路の理想は
Hard
Disk
SSD
Memory
Cache
(BRAM)
計算
エンジン
計算
エンジン
Memory
Cache
(BRAM)
結果の
マージ
Hard
Disk

More Related Content

数値計算のための Python + FPGA