2010年4月20日

第47回 CLR/H 勉強会に参加してきた

2010/04/17に第47回 CLR/H 勉強会が開催されたので参加していた。
今回は「並列」がキーワードだろうか。人間の脳はマルチタスクは2つまでが限界と研究結果が発表されたらしいが、最近のCPUはどんな状況だろうか。

最新CPUの紹介と並列プログラミングの概要

  • インテルマイクロアーキテクチャー「Nehalem」
  • 目標は「電源効率に優れたプロセッサー」
  • ハイパースレッディングテクノロジーが復活
  • キャッシュをいかに有効に使用するか、がアプリケーションのパフォーマンスに影響する
  • 3次キャッシュ:占有か共有か
  • インテルコンパイラ、VisualStudio2010
  • Core2Duo向けのアプリをQuadで動かすとパフォーマンスが上がらないケースがある
  • 2010年、すべてのCPUが並列プロセッサになった。
  • Intellが提供するツール:Parallel Studio
  • ハイパースレッドとターボブーストがチューニング作業では邪魔となる
    →チューニング中はOFFにするとよい

マルチコア時代の並列プログラミング - Visual Studio 2010 による並列化・最適化技法

  • 並列化は

    • 今から「意識」するべき
    • どこに使うかを考える
    • モジュール化プロファイルは現在のプロジェクトにも効果的(並列に限らず)
  • 並列化で苦労は増える
  • 並列と同時実行は別
  • CLR4.0でスレッドプールの仕組みが変わった
  • UMS(ユーザーモードスケジューラ)はC++のみ。64ビットのみ。
  • 並列プログラミングの考え方(タスク・データ・順序)
  • キャッシュを意識したプログラミングが必要
  • .NET Framework 4.0ではタスク並列ライブラリ(TPL)を使用
  • C++では並列パターンライブラリ(PPL)を使用
  • Threadを自分で作成するのはやめるべき(一つのThreadは高価)
  • ラムダ式を使用すると並列化しやすい
  • スレッド数の調整:IOに対しては制限したほうが良いかもしれない。CPUに対してはある程度自動に最適化されるが、一概には言えない
セッション1でもセッション2でも「キャッシュを意識したプログラミングが必要」とのこと。

F#入門 ~関数プログラミングとは何か~

  • OCamlをベースに設計された言語
  • F#の魅力としてマルチパラダイムがある(言語指向型プログラミングなど)
  • 見た目の美しさ(lightweight syntaxをOnにすることで、インデントによるブロックの表現)
  • デメリット

    • Express Editionが存在しない
    • IDEの機能が現時点で不完全
    • インテリセンスの品質
    • 日本語情報が不足
  • 環境は3択

    • Visual Studio 2010 Pro以上
    • Visual Studio Shell (IronPythonなどもある)
    • F# CTP
  • 関数は第一級の扱い(変数などと同等)
  • 値は変更できない(参照透過性)
  • 関数は常に一つの引数を受け取って、一つの値を返す
  • 複数の引数を扱うには、タプルを使用、または関数の中に関数を定義
  • カリー化と部分適用
  • Measureで単位を定義
  • Active Pattern
  • Quotation
  • アクター
途中で練習問題があり、参加者に実際にコーディングしてもらう、というシーンも。僕はカリー化あたりで理解不能となってしまった。カレーライスは好き。
今回は全体的にわからない単語が多く、ほとんどついていけなかった。ただ今後は業務アプリケーションでも並列を意識したプログラミングが必要になるケースも出てくるだろう。その時に備えて今から準備は進めて行きたい。