本センターの大規模計算機システムでは、ソースコードの作成から実行モジュールの生成はログインノードあるいはフロントエンドノードで行います。大規模計算機システム上でプログラム作成を行うと、それらの大規模計算機システムに負荷がかかることになり他の利用者のジョブ実行に支障がでます。

 

基本的なプログラムの実行までの流れは、
1. ソースコードの作成・編集・修正
2. ソースコードから実行モジュールの生成
というのが通常です。

1.ソースコードの作成

ソースコード(source code)の作成・編集・修正は、エディタ(editor)を用いて行います。本センターのフロントエンドノードには、エディタとしてviemacsが利用可能です。

2.ソースコードから実行モジュールの生成

ソースコードは、そのままではただ文字列を記しただけの状態なので、大規模計算機システムはどのように実行してよいかわかりません。ソースコードから大規模計算機システム上で実行できるファイル形式である実行モジュール(Executable module)を生成する必要があります。

 
basic01

ソースコードから実行モジュールを生成する過程は、ソースコードからオブジェクトモジュール(Object module)を生成する過程と、オブジェクトモジュールから実行モジュールを生成する過程から構成されます。厳密には、前者の過程はコンパイル(compile)、後者の過程はリンク(link)とよばれますが、ソースコードから実行モジュールを生成する過程をコンパイル(compile)という場合もあります。

 

コンパイル過程では、作成したソースコードは、ヘッダファイル(header file)が読み込まれるなどの前処理を経て、コンパイラ(compiler)と呼ばれるソフトウェアによって種々の解析が行われます。その結果、CPUが実行することのできる機械語に翻訳されたオブジェクトモジュールに変換されます。

 

【TIPS】コンパイル

コンパイルは、ソースコードに書かれた内容を解析して、実行モジュールを生成する前段階となる中間コードであるオブジェクトモジュールを生成します。

 

このコンパイルの過程は、どのような文字、数字が書かれているかを判断する字句解析(lexical analysis)、さらにそれらの字句がどのような構文を形成しているかを判断する構文解析(syntax analysis)、プログラムの意味的に正しいかを検証する意味解析(semantic analysis)から構成されています。興味のある方は詳細を掘り下げてみるとよいでしょう。

 

さらに、コンパイル過程中には、コードの最適化(code optimization)が行われ、プログラムの実行が高速になるような工夫がコンパイラによって行われます。この最適化は、プログラムの構造を理解し、対象となる計算機のハードウェア特性を最大限に活用できるよう行われなければならないため、コンパイラの研究者・開発者の最も苦労がみられる箇所でもあります。

 

機械語に変換されたオブジェクトモジュールは、それだけではまだ計算機上で実行することができません。オブジェクトモジュール内には、ソースコード内で記載された関数(例えば、printf()とか)がまだ機械語に翻訳されていません。そこで、リンク過程では、これらのオブジェクトファイル内で使われている関数を、あらかじめ準備されているライブラリあるいは自作していたライブラリ(library)内の機械語で書かれた関数に結びつける処理を行います。これをリンクといいます。これらのコンパイル、リンクが成功すると、ようやく計算機上で実行できる実行モジュールが生成されることになります。

 

なお、通常は、コンパイラは、コンパイラやリンクが動作している計算機上で動作する実行モジュールを生成します。しかし、本センターの大規模計算機システムでは、ソースコードの作成から実行モジュールの生成はログインノードあるいはフロントエンドノードで行うこととなり、クロスコンパイル(cross compile)という手法で対象となる大規模計算機システムのための実行モジュールを生成します。それぞれの大規模計算機システムでのコンパイル方法は、以下をご覧ください。

 

【TIPS】クロスコンパイラ

コンパイラやリンクが動作している計算機とは異なる計算機のための実行モジュールを生成するコンパイラのこと。