[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[dennou-ruby:003931] Re: NArray ループ高速実行用 DSL



おお,これはいいですね!

OpenMP にも対応するといいですね。(もうしてる?)

# 一時ファイルができるのではないかと思いますが,ループ脱出時に
   消す? (残る? or 残すオプションがある?)

ruby-statml にも流してみては?

堀之内

> 西澤です。
> 
> NArray を使っている時に、メソッド呼び出しでは対応出来ずに Ruby でループを回す必要がでてくる時があると思います。
> それでは遅いので、自前で拡張ライブラリを作りたくなることがありますが、
> 面倒なので、遅さを我慢することがありました。
> 
> そこで、 NArray ループ実行用の DSL ライブラリを作りました。
> Ruby の記法で記述したコードが C で実行されます。
> 現在のところ、四則演算にしか対応していません。
> 
> http://davis.gfd-dennou.org/rubygadgets/ja/?%28Library%29+NArrayExt%3A+NArray%E3%81%AE%E6%8B%A1%E5%BC%B5%E3%83%A9%E3%82%A4%E3%83%96%E3%83%A9%E3%83%AA%E3%82%92%E5%8B%95%E7%9A%84%E3%81%AB%E4%BD%9C%E3%82%8B
> 
> 
> ちなみにこんな感じで書くことができます。
> 
> 
> require "./narray_ext"
> include NumRu
> 
> N = 100
> M = 1000
> x = NArray.sint(N,M).indgen
> y = NArray.sint(N,M).indgen(1)
> z = NArray.sint(N,M)   # 結果格納用の配列
> 
> NArrayExt.c_loop(x,y,z) do |x,y,z| # このブロックが C で実行される
>   loop(1,M-2) do |j|
>     loop(0,N-1) do |i|
>       z[i,j] = x[i,j] * ( y[i,j+1] - y[i,j-1] )
>     end
>   end
> end
> 
> 
> 
> やっつけで作ったので、いろいろ不具合もあるかもしれません。
> 特に、コンパイル時の narray.h のパス指定に関して環境によってエラーになると思われます。
> その場合は、 narray_ext.rb を編集する必要があります。
> 例によって、コメント全く入れていません ^^;
> また、NumRu-NArray で試したので、 NArray でちゃんと動くかどうか分かりません。
> 興味がある方お試しください。
> (それなりに使えそうならば、将来 NumRu-NArray 本体に入れるかもしれません。)
> 
> 
> 西澤誠也
> 
> -- 
> Seiya Nishizawa
> RIKEN Advanced Institute for Computational Science
> Tel: +81-78-940-5754, Fax: +81-78-304-4972
> 7-1-26, Minatojima-minami-machi, Chuo-ku, Kobe, Hyogo 650-0047, Japan
> 

堀之内 武