# HG changeset patch # User Daichi TOMA # Date 1392350066 -32400 # Node ID aa9ffebd58edd5abdc2f0d2c253dec96fd13d186 # Parent fcc71ca8dac7cb98e435ce1f079e94eb99b7f042 fix diff -r fcc71ca8dac7 -r aa9ffebd58ed paper/chapter1.tex --- a/paper/chapter1.tex Thu Feb 13 14:42:12 2014 +0900 +++ b/paper/chapter1.tex Fri Feb 14 12:54:26 2014 +0900 @@ -1,5 +1,5 @@ \chapter{Haskellとは} \label{ch:haskell} - Haskell とは純粋関数型プログラミング言語である. + Haskell とは, 純粋関数型プログラミング言語である. \section{純粋関数型プログラミング} 関数とは, 一つの引数を取り一つの結果を返す変換器のことである. @@ -54,7 +54,7 @@ また計算するために数値でなければいけないといった制約を Haskell は推論し実行時に型の不整合が起きないようにしている. 型の定義を手動で行いたい場合は, 関数の前に型の定義を書くとよい. -整数の型である Int 型を受け取り Int 型を返すソースコード\ref{src:fib3}のように記述する. +整数の型である Int 型を受け取り, Int 型を返すソースコード\ref{src:fib3}のように記述する. Int は Eq 型クラスおよび Num 型クラスに属している. \begin{lstlisting}[label=src:fib3, caption=フィボナッチ関数の型の定義] @@ -143,14 +143,14 @@ つまりリストの型の値は, [] もしくは a : [a] になることが分かる. -このリストをHaskellでは\ref{src:list}のように定義する. +このリストをHaskellでは, ソースコード\ref{src:list}のように定義する. \begin{lstlisting}[label=src:list, caption=Haskellのリストの定義] data [] a = [] | a : [a] \end{lstlisting} -data というのは新しい型を定義する際に利用するキーワードである. +data というのは, 新しい型を定義する際に利用するキーワードである. 等号の前に型の名前, 等号の後に型が取り得る値の種類を指定する. 等号の前にある [] a というのが型名である. @@ -469,7 +469,7 @@ else begin \end{lstlisting} -まずプログラムでは, Eval モナドが定義された Control.Parallel.Strategies をロードし, Eval モナドを利用できるようにしている. +まず始めに, Eval モナドが定義された Control.Parallel.Strategies をロードし, Eval モナドを利用できるようにしている. Haskell のプログラムはmainという名前と実行したい関数を関連付けることで実行される. 今回は, print (runEval test)が実行される. diff -r fcc71ca8dac7 -r aa9ffebd58ed paper/chapter4.tex --- a/paper/chapter4.tex Thu Feb 13 14:42:12 2014 +0900 +++ b/paper/chapter4.tex Fri Feb 14 12:54:26 2014 +0900 @@ -10,7 +10,7 @@ 論理コアは, Intel のハイパースレッディング機能のことである. ハイパースレッディングは, 1 つのプロセッサをあたかも 2 つのプロセッサであるかのように扱う技術であり, -同時に演算器などを利用することはできないため性能が 2 倍になるわけではないが, 概ね20 \%程度クロックあたりの性能が向上すると言われている. +同時に演算器などを利用することはできないため性能が 2 倍になるわけではないが, 概ねクロックあたり 20 \%程度, 性能が向上すると言われている. \begin{table}[!htbp] \begin{center} @@ -112,7 +112,7 @@ \end{figure} 非破壊的木構造データベース Jungle は 12 スレッドで 10.37 倍の性能向上が得ることができる. -読み込みにおいて, スケールするデータベースであると言える. +つまり, 読み込みにおいて, スケールするデータベースであると言える. \clearpage \section{書き込みの性能計測} @@ -197,13 +197,13 @@ \label{tab:bbs_func} \end{table} -Warp は並列 HTTP サーバであるが, 計測環境ではネットワークがボトルネックとなってしまう. -ネットワークのボトルネックがどれぐらいあるのか調査するために, アクセスした際に "hello, world" という文字列を返すだけのプログラムを作成し測定する. +Warp は並列 HTTP サーバであるが, 計測環境ではネットワークがボトルネックとなってしまい, 並列性が確認できない. +実際にネットワークのボトルネックがどれぐらいあるのか調査するために, アクセスした際に "hello, world" という文字列を返すだけのプログラムを作成し測定する. ネットワークを介さずに性能測定する場合, 性能測定ツール weighttp に 3 スレッド利用するため, Warp で利用するのは 8 スレッドまでとする. weighttpの設定は, リクエストの総数 100 万, 同時に接続するコネクションの数 1,000, 実行時のスレッド数 3, HTTP Keep-Alivesを有効とする. -また, 現在の安定版である 7.6.3 の IO マネージャーは並列実行時に性能が向上という問題がある. +また, 現在の安定版である 7.6.3 の IO マネージャーは並列実行時に性能が向上しないという問題がある. どの程度影響があるか調べるためにGHC 7.6.3 でコンパイルし, ネットワークを介さない状態での測定も行う. 結果を表\ref{tab:warp}に示す. @@ -315,12 +315,12 @@ \end{table} Haskell 版は, Java 版と比較して読み込みで 3.25 倍, 書き込みで 3.78 倍の性能差が出ている. -Haskell は 実用的な Web サービスが開発できる. +このことから, Haskell は 実用的な Web サービスが開発できるといえる. \subsubsection{Haskell の生産性} 生産性の面からも Java との比較を行う. Haskell 版 Jungle が公開している関数の数は 18 で, コード行数は284行である. -Java を用いた Jungle の実装は, 3390行で, Haskell の実装は 1/12 程度のサイズとなっている. +Java を用いた Jungle の実装は, 3390行で, Haskell の実装は Java に比べて 1/12 程度のサイズとなっている. コード行数が短くなった要因としては, Haskellが独自の再帰的データ構造の定義を言語としてサポートしていることや, 関数が参照透過性を持つため再利用が行いやすいということが考えられる. diff -r fcc71ca8dac7 -r aa9ffebd58ed paper/introduciton.tex --- a/paper/introduciton.tex Thu Feb 13 14:42:12 2014 +0900 +++ b/paper/introduciton.tex Fri Feb 14 12:54:26 2014 +0900 @@ -14,7 +14,7 @@ 非破壊的木構造では, 排他制御をせずにデータへアクセスすることが可能でありスケーラビリティを確保できる\cite{shoshi:2010a}\cite{shoshi:2011a}\cite{shoshi:2011b}. 実装した並列データベースの読み込みと書き込みについて性能を計測し, -読み込みに関して 12 コアで実行した場合, 1 コアで実行した場合と比較して, 10.37 倍 という性能向上率が確認でき, +読み込みに関して 12 コアで実行した場合, 1 コアで実行した場合と比較して 10.37 倍 という性能向上率が確認でき, マルチコアプロセッサの性能を引き出すことができた. また, Web 掲示板サービスを開発し, 既存の Java の非破壊的木構造データベースを用いた掲示板実装との比較をおこない, 読み込みで 3.25 倍, 書き込みで 3.78 倍の性能が確認できた. @@ -25,7 +25,7 @@ DEOSプロジェクトはITシステムにおけるディペンダビリティを担保する技術体系をまとめ, 制度化, さらには事業化を目指している. DEOSプロジェクトは2006年に独立行政法人科学技術機構(JST)はCRESTプログラムの1つとして始まったプロジェクトである. DEOSプロジェクトは, 変化し続ける目的や環境の中でシステムを適切に対応させ, 継続的にユーザが求めるサービスを提供することができるシステムの構築法を開発することを目標としている\cite{deos2013}. -DEOSプロジェクトではそれらの技術体系を「オープンシステムディペンダビリティ」として定義し, それをDEOSプロセスとしてまとめた(図\ref{fig:deos_proccess}). +DEOSプロジェクトでは, それらの技術体系を「オープンシステムディペンダビリティ」として定義し, それをDEOSプロセスとしてまとめた(図\ref{fig:deos_proccess}). \begin{figure}[htpb] \begin{center} @@ -35,14 +35,14 @@ \end{center} \end{figure} -DEOSプロセスには変化対応サイクルと障害対応サイクルの2つのサイクルがある. +DEOSプロセスには, 変化対応サイクルと障害対応サイクルの2つのサイクルがある. 変化対応サイクルは上流プロセスにおける対象システムのオープンシステムディペンダビリティを担保するためのプロセスである. -障害対応サイクルは対象システムの運用時に必要とされるプロセスである. -DEOSプロセスは企画や設計という上流からシステム運用までの対象システムのライフサイクル全体に係わる. +障害対応サイクルは, 対象システムの運用時に必要とされるプロセスである. +DEOSプロセスは, 企画や設計という上流からシステム運用までの対象システムのライフサイクル全体に係わる. 対象システムの運用は, ステークホルダからの対象システムに対する要求に関する 合意を始めとしたあらゆる議論に関する合意をベースに行われる. -DEOS プロセスを構成している各(サブ)プロセスからアクセスが行われるデータベースとして D-ADD(DEOS Agreement Description Database)がある\cite{d_add2013}. +DEOS プロセスを構成している各(サブ)プロセスからアクセスが行われるデータベースとして, D-ADD(DEOS Agreement Description Database)がある\cite{d_add2013}. D-ADD はステークホルダ合意と対象システムに存在するプログラム・コード, 及び対象システムの運用状態との間の一貫性を常に保つための機構を提供する. このようなデータベースは様々なデータを柔軟に格納する必要があり, データベーススキーマの頻繁な変化に対応する必要がある. これらのデータベースは, Web からアクセスされることも想定される. diff -r fcc71ca8dac7 -r aa9ffebd58ed paper/master_paper.pdf Binary file paper/master_paper.pdf has changed diff -r fcc71ca8dac7 -r aa9ffebd58ed paper/thanx.tex --- a/paper/thanx.tex Thu Feb 13 14:42:12 2014 +0900 +++ b/paper/thanx.tex Fri Feb 14 12:54:26 2014 +0900 @@ -1,7 +1,7 @@ \chapter*{謝辞} \addcontentsline{toc}{chapter}{謝辞} -本研究を行うにあたり, 日頃より多くの助言, ご指導いただきました河野真治准教授に心より感謝申し上げます. + 本研究を行うにあたり, 日頃より多くの助言, ご指導いただきました河野真治准教授に心より感謝申し上げます. 本研究は, JST/CREST 研究領域「実用化を目指した組み込みシステム用ディペンダブル・オペレーティングシステム」D-ADD 研究チームとして実施しました. 研究の機会を与えてくださった, 株式会社 Symphony の永山辰巳さんに感謝します.