view presen/index.html~ @ 62:7087484574b0

update
author Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
date Mon, 26 Dec 2011 11:23:23 +0900
parents a967ee5a0b0f
children 923dd8de7be2
line wrap: on
line source

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">

<head>
<style>
.center {
margin-left: auto;
margin-right: auto;
text-align: center;
}
.textcenter {
text-align: center;
}
.taninaritop {
   margin: auto;
   width: 95%;
   font-weight: bold;
}
</style>
<title>2011/12/20</title>
<!-- metadata -->
    <meta name="generator" content="S5" />
    <meta name="version" content="S5 1.1" />
    <meta name="presdate" content="20111220" />
    <meta name="author" content="Nobuyasu Oshiro" />
    <meta name="company" content="University of the Ryukyu" />
<!-- meta temporary -->
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<meta http-equiv="Content-Script-Type" content="text/javascript" />
<meta http-equiv="Content-Style-Type" content="text/css" />
<!-- configuration parameters -->
<meta name="defaultView" content="slideshow" />
<meta name="controlVis" content="hidden" />
<!-- configuration extensions -->
<meta name="tranSitions" content="true" />
<meta name="fadeDuration" content="500" />
<meta name="incrDuration" content="250" />
<!-- configuration autoplay extension -->
<meta name="autoMatic" content="false" />
<meta name="playLoop" content="true" />
<meta name="playDelay" content="10" />
<!-- configuration audio extension -->
<meta name="audioSupport" content="false" />
<meta name="audioVolume" content="100" />
<meta name="audioError" content="false" />
<!-- configuration audio debug -->
<meta name="audioDebug" content="false" />
<!-- style sheet links -->
<link rel="stylesheet" href="ui/default_utf/slides.css" type="text/css" media="projection" id="slideProj" />
<link rel="stylesheet" href="ui/default_utf/outline.css" type="text/css" media="screen" id="outlineStyle" />
<link rel="stylesheet" href="ui/default_utf/print.css" type="text/css" media="print" id="slidePrint" />
<link rel="stylesheet" href="ui/default_utf/opera.css" type="text/css" media="projection" id="operaFix" />
<!-- embedded styles -->
<style type="text/css" media="all">
.imgcon {width: 100%; margin: 0 auto; padding: 0; text-align: center;}
#anim {width: 33%; height: 320px; position: relative;}
#anim img {position: absolute; top: 0px; left: 0px;}
</style>
<!-- S5 JS -->
<script src="ui/default_utf/slides.js" type="text/javascript"></script>
</head>
<body>

<div class="layout">
<div id="controls"><!-- DO NOT EDIT --></div>
<div id="currentSlide"><!-- DO NOT EDIT --></div>
<div id="header"></div>
<div id="footer">
<h1>セミナー: 2011/ 12/ 20</h1>
<h2>並列信頼研</h2>
</div>
</div>

<div class="presentation">

      <div class="slide">
        <h1>Continuation based Cの GCC 4.6 上の実装について</li>
        <h3></h3>
	<li>大城 信康</li>
        <h4><a href="http://ie.u-ryukyu.ac.jp/" rel="external">琉球大学 並列信頼研究室</a></h4>
        <div class="handout"></div>
      </div>
      <!-- PAGE -->
      <div class="slide">
	<h1>目的と背景(1)</h1>
	<li>当研究室ではコードセグメント単位で記述するプログラミング言語Continuation based C (以下CbC)という言語を開発している。</li>
	<li>コードセグメントは並列実行の単位として使うことができ、プログラムの正しさを示す単位としても使用することができる。</li>
      </div>
      <!-- PAGE -->
      <div class="slide">
 	<h1>目的と背景(2)</h1>
	<li>CbC のコンパイラは2008年に GCC をベースとしたコンパイラが開発された。</li>
	<li>GCC をベースとした CbC コンパイラは、GCC のアップデートに合わせ変更する必要がある。</li>
	<li>本研究ではGCC-4.5 をベースとしていた CbC コンパイラを GCC-4.6 へのアップデートを行い、Intel64 への対応するとともに CbC の拡張を行う。 </li>
      </div>
      <!-- PAGE -->
      <div class="slide">
	<h1>今週の作業内容</h1>
	<li></li>
	<li>環境付き継続について</li>
	<ul>
	  <li>変数 retval を static スレッドローカル(TLS)での実装</li>
	</ul>
      </div>
      <!-- PAGE -->
      <div class="slide">
	<h1>static TLS のGeneric Tree</h1>
	<li>変数 retval の宣言(VAR_DECL)</li>
	<li>static TLS の場合追加される情報は以下の2つ:(Linux)</li>
	<ul>
	  <li>TLS のモデル: TLS_MODEL_LOCAL_EXEC</li>
	  <li>static フラグ 1</li>
	</ul>
	<li class="incremental">上記の設定で retval を作成しても正しい返り値は得られなかった。</li>
      </div>
      <!-- PAGE -->
      <div class="slide">
	<h1>環境付き継続の構文木をみる</h1>
	<li>環境継続において以下の retval 変数は static で作られている.</li>
<small>
<pre>
({
  __label__ _cbc_exit0;
  static __thread int retval;
  void _cbc_internal_return(int retval_, void *_envp){
    printf("in _cbc_internal_return\n",retval_);
    retval = retval_;
    goto _cbc_exit0;
  }
  if (0) {
  _cbc_exit0:
    return retval;
  }
  _cbc_internal_return;
})
</pre>
</small>
      </div>
      <!-- PAGE -->      
      <div class="slide">
	<h1>環境付き継続の構文木をみる</h1>
	<img src="./pix/BIND_EXPR.png">
	<li>BIND_EXPR は{ } の中身を束ねる。</li>
	<li>STATEMENT_LIST が1つ1つのプログラムを表す木を持っている。</li>
      </div>
      <!-- PAGE -->
      <div class="slide">
	<h1>環境付き継続の構文木をみる</h1>
	<img src="./pix/STATEMENT_LIST_1.png">	
	<li>BIND_EXPR は _cbc_internal_return 関数を<br>
	ADDR_EXPR は最後の行の _cbc_internal_return を表す。</li>
      </div>
      <!-- PAGE -->
      <div class="slide">
	<h1>環境付き継続の構文木をみる</h1>
	<li>_CbC_return の実装より作られる構文木を見てみる。</li>
	<scale>
	<img src="./pix/STATEMENT_LIST_2.png">
	</scale>
      </div>
      <!-- PAGE -->
      <div class="slide">
	<h1>環境付き継続の構文木をみる</h1>
	<li>出来上がる構文木が違う。</li>
	<ul>
	  <li>DECL_EXPR が 1つ足りない</il>
	  <li>BIND_EXPR の部分が COND_EXPR になっている。</li>
	</ul>
      </div>
      <!-- PAGE -->
      <div class="slide">
	<h1>DECL_EXPR の問題</h1>
	<li>なくなっている DECL_EXPR は VAR_DECL の部分。</li>
	<li>static __thread int retval になる。</li>
	<li>下記の様にソースを変更</li>
	<pre>
//      pushdecl (decl_cond);
add_stmt (build_stmt(location, DECL_EXPR,  pushdecl (decl_cond)));
	</pre>
	<li>これで DECL_EXPR が追加された。</li>
      </div>
      <!-- PAGE -->
      <div class="slide">
	<h1>COND_EXPR の問題</h1>
	<li>BIND_EXPR でなくて COND_EXPR になっていた問題。</li>
	<li>BIND_EXPR をみると以下の様な構成になっていた。</li>
	<img src="./pix/COND_EXPR.png">
	  <li>BIND_EXPR をなぜか COND_EXPR でもう一度包んでいた。</li>
	  <small>
	  <p>COND_EXPR には if(0){ } の中身が入る。</p>
	  </small>
       </div>
      <!-- PAGE -->
      <div class="slide">
	<h1>ソースの手直し</h1>
	<li>if(0){ } の構文木が作られる手順を元に<br>
	cbc_finish_labeled_goto 関数を手直しした。
	<li>同じ構文木が作られるようになった。</li>
      </div>
      <!-- PAGE -->
      <div class="slide">
	<h1>結果</h1>
	<li>正常な値が返ってくるようになった。</li>
	<li class="incremental">しかし、-O2 オプションをつけると返り値の取得が失敗した。</li>
	<li class="incremental">もっと細かく構文木をみて違いを見つける必要がある。</li>
      </div>
      <!-- PAGE -->
<!--
      <div class="slide">
	<h1>static TLS のGeneric Tree</h1>
	<li>変数 retval の宣言(VAR_DECL) が OS X の場合使用する TLS モデルが違った。</li>
	<li>Linux: TLS_MODEL_LOCAL_EXEC</li>
	<li>OS X: TLS_MODEL_REAL<br>(TLS_MODEL_GLOBAL_DYNAMIC)</li>
      </div>
      <!-- PAGE -->
      <div class="slide">
	<h1>今後の予定</h1>
	<li>プロシン用プレゼンの用意</li>
	<li>typedefrec, selftype の実装</li>
	<li>CbC でタクスマネージャ作成</li>
      </div>
      <!-- PAGE -->
</div>
</body>
</html>