# HG changeset patch # User Nobuyasu Oshiro # Date 1324727854 -32400 # Node ID 06ce8fb8e2786c9d11be11d1507d8abfeb828afd # Parent a967ee5a0b0fc642314ec32b1e8609a8f33c7c01 modify presen/index.html diff -r a967ee5a0b0f -r 06ce8fb8e278 presen/index.html --- a/presen/index.html Sat Dec 24 18:53:34 2011 +0900 +++ b/presen/index.html Sat Dec 24 20:57:34 2011 +0900 @@ -87,12 +87,13 @@

目的と背景(1)

  • 当研究室ではコードセグメント単位で記述するプログラミング言語Continuation based C (以下CbC)という言語を開発している。
  • コードセグメントは並列実行の単位として使うことができ、プログラムの正しさを示す単位としても使用することができる。
  • +
  • コードセグメントにより Many Core での並列実行を高い性能と高い信頼性で実現することができると考える。
  • 目的と背景(2)

  • CbC のコンパイラは2008年に GCC 4.4 をベースとしたコンパイラが開発された。
  • -
  • GCC をベースとした CbC コンパイラは、GCC のアップデートに合わせ変更する必要がある。
  • +
  • GCC をベースとした CbC コンパイラは、修正・追加された最適化の機能を使用する為に、 GCC のアップデートに合わせ変更する必要がある。
  • 本研究ではCbC コンパイラを GCC-4.6 へとアップデートを行い、Intel64 への対応するとともに CbC の拡張を行う。
  • @@ -117,16 +118,17 @@

    Continuation based C

    -
  • Cの関数より細かな単位、コードセグメントを記述の基本とする。
  • -
  • コードセグメントは並列の実行単位であり、プログラムの正しさを示す単位としても使うことができる。
  • -
  • Many Core での並列実行を高い性能と高い信頼性で実現することができると考える。
  • - +

    コードセグメント単位での記述と継続を基本としたプログラミング言語。

    +
  • プログラムの記述は C の構文と同じだが、ループ制御や関数コールが取り除かれる。
  • +
  • コードセグメント
  • +

    Continuation based C

    -
  • プログラムの記述は C の構文と同じだが、ループ制御や関数コールが取り除かれる。
  • -
  • 継続(goto)により次のコードセグメントへと処理を移る。
  • @@ -208,25 +210,54 @@

    シンタックスの追加

    -
  • __code でコードセグメントの宣言
  • +

    __code でコードセグメントの宣言

    • __code 用idとkeywordを作成。
    • -
    • __code で宣言されるコードセグメントは void 型の関数と同じにする。
    • +
    • 戻り値が無い為、コードセグメントは void 型の関数で作成される木と同じ木が作られる。

    シンタックスの追加

    -
  • goto シンタックスの追加
  • +

    goto シンタックスの追加

    • 通常の goto に加え、コードセグメントを呼び出す処理を追加。
    • コードセグメントへのgoto後は、 return の処理を自動で追加。
    +
    + + + + + + + + + + +
    実際のコード GCC 内で処理されるコード
    +
    +goto factorial0(1, x); 
    +	    
    +
    +
    +goto factorial0(1, x); 
    +return;
    +	    
    +
    -

    -
  • +

    fastcall属性の付与

    +
  • i386 において関数呼び出しの際、引数渡しをできるだけレジスタを用いるGCCの拡張機能。
  • +
  • コードセグメントは処理が細かい為、継続の回数が多くなる。引数をレジスタ渡しにすることで速度向上を狙う。
  • +
    +if(!TARGET_64BIT) {
    +  attrs = build_tree_list (get_identifier("fastcall"), NULL_TREE); 
    +  declspecs_add_attrs(specs, attrs);
    + }	  
    +	
    +
  • Intel64 に対してはfastcallは標準でつくようになっている。