@article{oai:ipsj.ixsq.nii.ac.jp:00096945, author = {松崎, 公紀 and 江本, 健斗 and Kiminori, Matsuzaki and Kento, Emoto}, issue = {3}, journal = {情報処理学会論文誌プログラミング(PRO)}, month = {Dec}, note = {融合変換は,複数の関数や繰返しを1つにまとめることにより中間データを除去するプログラム変換である.小さな部品を組み合わせるようなプログラミングスタイルにおいて,融合変換を行うことで中間データを除去することにより,プログラムの効率を向上させることができる.C++ 言語においてこの融合変換を実現する手法の1つに,式テンプレートを用いたメタプログラミング手法がある.しかし,従来の式テンプレートを直接記述するメタプログラミングでは,式から抽象構文木を構成する部分と最適化を行う部分が混在してしまうため,プログラムが複雑になってしまう.近年,式テンプレートを用いたプログラムを記述しやくするライブラリとしてboost::protoが作られ,利用できるようになった.boost::protoを用いることで,融合変換などの最適化機能付きライブラリを容易にかつ見通し良く作成できることが期待される.発表者らは,並列計算における計算パターン(並列スケルトン)を提供する並列スケルトンライブラリを作成している.その中で,並列スケルトンの融合変換機能をboost::protoを用いて,より高い拡張性を持つように書き換えたいと考えている.本発表では,融合変換機能を持つライブラリをboost::protoを用いて作成することで得られる利点や問題点などについて報告する., Fusion transformation is a program transformation that composes functions or loops into a single one to remove intermediate data. In a programming style in which we compose small program pieces, we can gain the performance of a program with fusion transformation. An approach for implementing fusion transformation in C++ is to use a metaprogramming technique called expression templates. However, if we develop programs directly with expression templates, programs are often complicated due to mixed program pieces for constructing abstract syntax trees and for applying optimization to them. Recently, a template library called boost::proto has been developed for clear implementation of expression templates. We expect that we can develop a fusion-equipped library easily and clearly by using boost::proto. We have been developing a parallel skeleton library that provides computation patterns for parallel programming (called parallel skeletons). We try to rewrite the fusion optimization mechanism in the library using boost::proto so that it has high extendability. In this presentation, we report the advantages and problems in the implementation of a fusion-equipped library with boost::proto.}, pages = {49--49}, title = {boost::protoを用いた融合変換機能付きライブラリの作成}, volume = {6}, year = {2013} }