ふんが研でBach-Cを使用できるのは、marfic, hermesの端末みである。
Bach-Cのマニュアルは/home/vdec/sharp/bach-3.5/Manualにあるので、各自参考にしてもらいたい。
以下にBach-Cの基本事項を記す。
●データ型
- 各変数のビット幅を指定することができる
- char, short, int, long, signed, unsigned, struct,enum,float,double,ユーザ定義型が使用可
●ビット幅
- 変数宣言時、ビット幅を指定しないと、デフォルトのビット幅が使用される
- char, short:8bit
- int, signed, unsigned:16bit
- long:32bit
- float,double:64bit
- 定数の場合、signedで表される最小ビット幅が使用される
●ライブラリ関数
- ANSI Cライブラリにある以下の数値演算用の関数をサポート
- acos,asin,atan,atan2,cos,sin,tan,cosh,sinh,tanh,exp,ldexp,log,log10,pow,sqrt,ceil,fabs,floor,fmod
- ヘッダファイルを読み込む必要はない
●ファイル入出力
- シーケンシャルアクセスファイルへの入出力をサポートしている
- ファイル入出力はシミュレーション用記述内で有効(回路生成は不可)
- ファイル名は動的に指定できない
- ファイル記述子の宣言方法
stream_in infile="data.in";
stream_out outfile="result.txt";
●並列性の記述
- par構文は、複数の分が並列に実行されることを明示する構文
- データの依存関係がない部分では、Bach-Cが自動的に並列に実行される回路を生成してくれる
- したがって、局所的な並列を必要とする部分では、par構文を使うと効率が悪い。(par構文は、関数を複数のスレッドで実行させるなどの用途で用いたほうがよい)
●スレッド間の通信
- Par構文で記述した並列に動作する処理の単位をスレッドと呼ぶ
- あるスレッドで書き込んだデータを他のスレッドで読み込むためには、チャネル型の変数を用いなければならない
- チャネルには、同期型チャネル(2種類)と非同期型チャネルが存在する
- 同期型チャネル chan
- 非同期型チャネル achan
●Bach Cが使用できないもの
- 浮動小数点演算(float, double: シミュレーションはOKだが、合成では使用不可)
- ポインタ(*, ->, &)(参照呼出しはのぞく)
- 関数の再帰呼び出し
- 関数の可変長引数
- 構造体の配列
- goto, union, extern
●検証環境
- bach2c:コンパイルド・シミュレータ
- Bach CをANSI Cに変換後、Cコンパイラによりコンパイルし、シミュレーションするため高速
- bachdbg:デバッガ
- シミュレーション速度は遅いが、スクリーンデバッグが可能
●bach2c
- 使用方法
bach2c [-mn 関数名] [-gcc] [-Dxxx] file.c
- -mn : main()以外の関数を最初に呼び出したいときに、その関数名を指定する
- -gcc : コンパイルにgccを用いる(デフォルトではシステム付属のcc)
- マクロの指定に-Dオプションを指定することが可能(Cコンパイラと同様)
|