はじめに: Paraphrase での並列処理
Paraphrase では、括弧もしくは二重括弧で囲むだけで並列処理が記述できます。ある並列処理から別の並列処理へと情報を渡すパイプ(チャネル)も用意されているので、scatter-gather モデルによる並列計算も可能です。
- 単一の別スレッドで実行:
- 単一の大括弧 [ と ] で囲んで、[ doSomething ] と書けば、 別スレッドで doSomething が実行されます。
- 複数のスレッドで実行:
- 二重大括弧 [[ と ]] で囲んで、[[ doSomething ]] と書けば、 複数のスレッドで doSomething が実行されます。 デフォルトでは CPU の数分のスレッドが走り出すので、 4 コア 8 (CPU)スレッドの環境であれば、8 個の並列処理が開始されます。 AMD の 2990wx は 32 コア 64 (CPU) スレッドとのことですので、 64 個の並列処理が走ることでしょう(未確認)。
- 普通にメインスレッドで実行:
- 括弧で囲まずにそのまま doSomething と書けば、 インタプリタのメインスレッドにて doSomething が実行されます。
目次
- 特徴
- プログラム例
- ダウンロード
- インストール
- 起動方法
- 終了方法
- チュートリアル等
1. 特徴
- 整数値だけではなく、浮動小数点値や多倍長整数、リストなども使用可能
- マルチプラットフォーム対応 - Mac, Linux(Ubuntu),Windows10 で動作を確認
- 作者が日本人 - 日本語で OK
2. プログラム例
// 1〜1,000 万までに存在する素数の個数を調べる。
"prime?" :
switch
dup 1 == -> drop false break
dup 2 == -> drop true break
dup 2 % 0? -> drop false break
// otherwise
true swap dup sqrt ceil >int 3 swap
for+ dup i % 0? if swap drop false swap leave then 2 step next drop
dispatch
;
reset-pipes
// 奇数については並列処理で調べる
[ 3 10000000 for+ i >pipe 2 step next ]
[[ // 複数スレッドで検証作業(=woker thrread)
while-pipe
dup prime? if >pipe else drop then
repeat
]]
() 2 dup prime? if append then // 2 については、ここで調査
while-pipe append repeat { < } sort
( "numOfPrime=%d (%d ... %d)\n" ${ size } ${ car } ${ last } ) printf
drop
上のプログラムを実行すると、
numOfPrime=664579 (2 ... 9999991)
ok.
と表示されます。素数の個数と、7 桁の最大の素数 9999991 も正しく表示されています。
マルチコアスケールアウトの状況ですが、上記のプログラムを 4 コア 8 スレッドの Core i7-7700K (4.2 GHz) で実行したところ、以下のような結果となりました。
注:Windows では time コマンドがないので、-t オプションにて計測できるようにしてあります。
C:\...\Paraphrase\samples>test_countPrimeMT -t
numOfPrimes=664579 (2 ... 9999991)
real: 8.4077[s]
user: 63.4063[s]
sys : 0.0938[s]
user/real の値は約 7.5 となり、ほぼ全コア(全 CPU スレッド)がフル稼働になっていることが分かります。
3. ダウンロード
各プラットホーム用ビルド済みライブラリは GitHub (https://github.com/iigura/Paraphrase/releases) より入手して下さい。
4. インストール
ビルド済みパッケージを使用する場合、インストール作業は不要です。適当な場所に展開して下さい。boost や readline を使用しているので、場合によってはこれらが必要になるかもしれません。必要に応じて、boost や readline をインストールして下さい。
ソースコードからビルドする場合は、git clone https://github.com/iigura/Paraphrase.git して、Paraphrase ディレクトリの直下にある BUILD.txt を参考にビルドして下さい。
5. 起動方法
Paraphrase ディレクトリ直下にある para (Windows の場合は para.exe)を実行して下さい。
6. 終了方法
Windows では Ctrl-Z を入力(リターンキーも押して下さい)するか Ctrl-C で終了します。Mac および Linux 版では Ctrl-D もしくは Ctrl-C にて終了します(readline のヒストリに記録されるので、Ctrl-D の使用がオススメです)。
7. チュートリアル等
現在、処理系の開発が終わったばかりであり、解説文書や入門ドキュメント等まで手が回っていません。現在のところはワードリファレンス(単語辞典: docs/words/index.html)しかありませんが、各ワードにおける使用例を載せていますので参考にしてみて下さい。
Paraphrase に関する解説文書や入門書などは今後作成していく予定です。不明な点などがありましたら、この文書に対するコメント(およびメンション)等を使って知らせていただければ助かります。ニーズの高そうなものから順次書いていきたいと思います。
その他、Twitter ( @paraphrase_lang ) や Facebook ( Paraphrase ユーザー会 ) にて発信中です。バグレポートや要望・質問などは Facebook の方に書いて頂ければ助かります。