code

2017年8月10日 星期四

Parallel Java 3 - Memoization and Streams

Memoization

這是一種functional programming optimization的方法。

在sequential FP中,這其實就是建立lookup table,類似dynamic programming的方法:


parallelization版本中,lookup table應該要存放的是future objects,這樣才不會馬上去compute tasks,但是一旦compute之後,就不會再做第二次:




Java Streams

簡單來說,就是把java collection轉換成functional programming的collection,所以一堆filter/map/reduce之類的function都可以用,對parallelization來說,跟scala依樣,只要加上個par就可以把stream轉換成parallel stream,所以所有的filter/map/reduce之類的operation都會run in parallel。



Determinism

首先定義
1. functional determinism: 如果一個parallel prorgam,同一個input永遠會有同一個output
2. structural determinism: 如果一個parallel program,同一個input永遠會有同一個computation graph
3. determinism: 1. 2.同時成立

parallel program最常見的問題就是data race,如果使用本課程所教的parallel programming constructs的話,保證是deterministic!

就這樣  @@









沒有留言:

張貼留言