diff --git a/doc/api.ja.md b/doc/api.ja.md index fbe0411d..87e94d13 100644 --- a/doc/api.ja.md +++ b/doc/api.ja.md @@ -1,105 +1,133 @@ # API of Next NArray + under development ## NArray演算の仕様 ### NArray Types - #define NARRAY_DATA_T 0x1 // データを保持する。contiguousアクセスのみ可能。 - #define NARRAY_VIEW_T 0x2 // データを保持しない。他のNArrayを参照。stride/index アクセスが可能 - #define NARRAY_FILEMAP_T 0x3 // ファイルマップ(TBI) + +NArrayの型は、以下の3つのタイプに分類される。 + +```c +#define NARRAY_DATA_T 0x1 // データを保持する。contiguousアクセスのみ可能。 +#define NARRAY_VIEW_T 0x2 // データを保持しない。他のNArrayを参照。stride/index アクセスが可能 +#define NARRAY_FILEMAP_T 0x3 // ファイルマップ(TBI) +``` ### Loop Rule - method( a[nz,1,nz], b[nz,ny,1] ) => c[nz,ny,nx] + +NArrayの演算は、以下のルールに従って行われる。 + +```text +method( a[nz,1,nz], b[nz,ny,1] ) => c[nz,ny,nx] +``` + * サイズ1の次元は、1エレメントを繰り返し参照される。外積のようなもの * すべての演算・メソッドについて同様のルールが適用 ### Inplace - a.inplace + b => a に結果が保存される -## NArrayメソッド定義の例 +NArrayの演算は通常、新しい配列を生成する。`inplace`メソッドを使うと、元の配列に直接結果を保存する。 -単純なループ演算を行うイテレータ関数を定義し、 -ndfunc_alloc関数で ndfunc_t構造体に登録し、 -ndfunc_do関数で多次元ループ処理を行う。 -配列のキャスト、出力配列の準備、および多次元ループ処理については、内部で自動的に行う。 +```ruby +a.inplace + b # => a に結果が保存される +``` - #define cT numo_cDFloat - // 最も内側のループごとに呼ばれるイテレータ関数 - static void - iter_dfloat_add(na_loop_t *const lp) - { - size_t n = lp->n[0]; - double *a = (double*)(lp->args[0].ptr + lp->args[0].iter[0].pos); - double *b = (double*)(lp->args[1].ptr + lp->args[1].iter[0].pos); - double *c = (double*)(lp->args[2].ptr + lp->args[2].iter[0].pos); - size_t i; - - for (i=0; in[0]; + double *a = (double*)(lp->args[0].ptr + lp->args[0].iter[0].pos); + double *b = (double*)(lp->args[1].ptr + lp->args[1].iter[0].pos); + double *c = (double*)(lp->args[2].ptr + lp->args[2].iter[0].pos); + size_t i; + + for (i=0; i