[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[dennou-ruby:003931] Re: NArray ループ高速実行用 DSL
- To: dennou-ruby@xxxxxxxxxxx
- Subject: [dennou-ruby:003931] Re: NArray ループ高速実行用 DSL
- From: Takeshi Horinouchi <horinout@xxxxxxxxxxxxxxxxx>
- Date: Tue, 16 Feb 2016 22:16:07 +0900
おお,これはいいですね!
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
>
堀之内 武