@article{oai:ipsj.ixsq.nii.ac.jp:00081614,
 author = {笹田, 耕一 and 卜部, 昌平 and 松本, 行弘 and 平木, 敬 and Koichi, Sasada and Shohei, Urabe and Yukihiro, Matsumoto and Kei, Hiraki},
 issue = {2},
 journal = {情報処理学会論文誌プログラミング(PRO)},
 month = {Mar},
 note = {我々は,高性能なRuby処理系の開発を行っている.Ruby処理系は仮想マシン(VM)を用いて実現されているが,現在のVMでは,同時にたかだか1つのRubyスレッドのみ実行するという制約があり,並列実行をサポートしていない.また,複数のRubyプロセスを用いて並列実行すると,計算に必要となるオブジェクトの転送がプロセス間転送となり,オーバヘッドが大きいという問題がある.そこで,我々は1つのプロセスに複数のVMを並列に実行できるマルチ仮想マシン(MVM)の開発を行っている.各VMはオブジェクト空間を独立に管理するが,各VMが同一プロセス内にあることを活かしたVM間の高速なオブジェクト転送を行うことができる.また,これらの機能をRubyから利用するためのプログラミングインタフェース(API)を設計した.さらに,Rubyの遠隔メソッド呼び出し機構であるdRubyをMVM上で利用できるように拡張し,MVMの利用を容易に行うことができるようにした.MVMの実装は,現在の処理系との互換性を維持するため,既存の処理系のプロセス全体で共有されるデータ,たとえばC言語のグローバル変数やI/O資源などを,VMごとに保持するようデータ構造を変更することで行った.本論文では,開発しているMVMの設計と実装について述べ,MVMを用いるためのAPIを説明する.そして,MVMを用いた並列処理の現在の実装での性能評価について述べる., We are developing a high-performance Ruby interpreter. The current interpreter is a bytecode-based Virtual Machine (VM). However, the current VM does not support parallel processing because the VM is restricted to running at most one Ruby thread at time. Parallel processing using multiple processes requires additional overhead to transfer objects over some inter-process communication mechanism. Based on these challenges, we are developing a Multiple Virtual Machine (MVM) implementation which can run multiple Ruby VMs simultaneously in one process. Each individual VM manages an isolated object space. For MVM, we implemented a fast object transfer technique by taking advantage of sharing the same virtual address space. We also designed a programming interface (API) to use these features. Moreover, we extended dRuby, a remote method invocation framework, to make it easy for programmers to use MVM features. In order to keep compatibility with the current Ruby interpreter, we implemented MVM by replacing the current VM's use of process-global resources, such as C global variables and I/O resources, with the use of VM-local data structures. In this paper, we will describe the design and implementation of our MVM and its API. We will also show several performance evaluations of parallel processing in Ruby using our current MVM implementation.},
 pages = {25--42},
 title = {Ruby用マルチ仮想マシンによる並列処理の実現},
 volume = {5},
 year = {2012}
}