1. 学会の概要
PARA20xxは並列処理の分野における著名な国際会議の一つであり,スウェーデン,デンマーク,ノルウェー,フィンランドの北欧4カ国の持ち回りで2年ごとに開催される。今回はノルウェーのトロンヘイムで開かれ,150名程度の参加者があった。本学会では,一般講演が13件と非常に少なく,代わりに15個ものミニシンポジウムが並列して行われるのが特徴的である。ミニシンポジウムはそれぞれ10件程度の講演からなり,分子ナノ磁性のシミュレーションなど,主催者の個性によってかなり専門的なテーマを扱うものもある。ただ今年は,最近の技術動向を反映して,マルチコア,Cell,GPU,FPGAなど,チップレベルでの(超)並列処理を扱うミニシンポジウムが多かった。
2. 興味深かった講演
興味深かった発表と自分の発表について,以下にまとめる。
(1) Tutorial on GPU Programming for Scientific Computing
Philipp Slusallek (NVIDIA Corp.)
GPU(Graphics Processing Unit)は最近,手軽に使える高性能計算環境として注目されており,たとえばNVIDIA社のGeForce8800GTXでは,128個のスカラープロセッサを搭載して350GFLOPS(単精度)の速度で計算を実行できる。このGPUを科学技術計算に利用するため,NVIDIA社ではCUDAと呼ばれるプログラミング環境を提供している。CUDAでは,プログラムはC/C++言語で記述され,CPUで実行される逐次部分とGPUで並列に実行されるカーネルと呼ばれる部分から構成される。カーネルは,数千個〜1万個のスレッドが並列に実行されるスレッド並列の形で書かれ,十個〜百個のスレッドがGPUの各スカラープロセッサに割り当てられて時分割で実行される。これにより,GPUメモリのレイテンシを隠蔽している。また,複数のスレッドをまとめてスレッドブロックとして定義することができ,同じブロック内のスレッドは通信が可能である。
GPUで性能を出すには,演算の並列性をできるだけ増やし,独立に実行可能なスレッド数を増やすこと,データアクセスに対する演算の比率を高めること,メモリアクセスをできるだけ連続的に,大きいブロックで行うこと(空間的局所性の向上),チップ上の共有メモリを活用してチップ外部へのメモリアクセスを減らすこと,演算をできるだけGPUボード上で行ってCPUメモリとの間のデータ転送を減らすこと,複雑な条件分岐をできるだけ避けること,などが重要である。
感想: 最近,GPUを使った計算を試みているため,参考にしたいと思って聞いたが,内容的には初めてGPUを使うユーザ向けであり,CUDA Programming Manualに書いてある以上の情報はあまり得られなかった。参加者からの質問としては,異なるスレッドブロック間で協調動作を行う方法に関する質問がいくつかあった。スレッドブロックの実行順序は不定であるため,ブロック間で同期を行うことはできないが,CUDA 1.1からは,アトミック・メモリ・オペレーションにより,ブロック間でジョブキューを共有することなどができるようになる。また,互いに依存関係のある複数のカーネルを順次コールする場合は,カーネル間で自動的に同期が取られるとのことであった。スレッドブロック間での協調動作が難しいことは,CUDAを使う上でやや不便な点の一つであり,使いやすいインタフェースができることを期待したい。
(2) Tutorial on FPGA Programming for Scientific Computing
Olaf O. Storaasli (Oak Ridge National Laboratory), Sven Holmquist, Magnus Peterson (Synective Labs), Sandro Stucki (Mitrionics)
FPGA(Field Programmable Gate Array)は,近年,科学技術計算のためのアクセラレータの一つとして注目されている。汎用CPUは様々な用途を想定して設計されているため,特定の単純な計算を大量に行う場合には,チップ面積のうちわずかな部分しか活用されていないことが多い。それに対してFPGAは,目的に応じたロジックを構成できるので,チップ面積のほぼ全部を計算に使うことができ,シリコンの利用効率が飛躍的に高まる。クロック周波数ではCPUに敵わないものの(1/10程度),この効率性のため,用途によっては汎用CPUの100倍もの性能を実現できる。また,消費電力はCPUの1/10程度と小さい。
FPGAでロジックを構成する場合,従来はVHDLやVerilogなどの低水準言語を使うのが普通であったが,最近ではImpulseC,Mitrion-C,Celoxicaなどの高水準言語が使えるようになっている。また,Matlab/SimulinkからもFPGAロジックを合成できる。これらの利用により,開発の手間を大幅に削減できる。ただし,VHDLでの記述に比べると,性能面でやや劣り,また,ロジックの規模が大きくなる傾向がある。高水準言語では,C言語に類似した形式でロジックを記述し,それをコンパイルしてVHDLにし,論理合成,FPGA上での配置・配線を行ってFPGAに書き込むビットファイルを生成する。論理合成後には,シミュレーションによるロジックの確認が可能である。
FPGAを使うにあたっては,処理のうち加速したい部分を抽出し,まずパイプライン化・並列化ができるようにアルゴリズムを書き換える。たとえば2次元画像に対する5×5のフィルタを構成する場合,横方向に連続する5画素とフィルタ行列を乗算し,結果をパイプラインにより加算して部分和を計算する。また,これを縦方向に5画素分並列に行い,再びパイプラインにより部分和を縦方向に加算する。さらに,論理素子に余裕があれば,画像上の複数の領域に対するフィルタの適用を並列に行うこともできる。VHDLでこれを記述する場合は,このような論理をブロック図で表し,それに即して記述を行う必要がある。一方,ImpulseCでは,ANSI-Cをベースとし,処理中でCPUが実行する部分,FPGAが実行する部分をそれぞれプロセスとして記述する。特にFPGAが実行する部分は,ストリーム型のプロセスとして記述する。具体的には,フィルタプロセスを,入力ストリームのオープン,データの横方向シフト,加算と乗算,出力ストリームの書き込みとして記述する。これにより,パイプライン化・並列化されたロジックが自動的に生成される。また,CPUとFPGAの間でデータ授受を行うためのインタフェース関数も自動的に生成される。一方,Mitrion-Cでは,Mitrionプロセッサという仮想的な並列プロセッサを想定し,それに実行させる並列プログラムという形で処理を記述する。そのため,デバッグは通常の並列プログラムと同様にでき,論理回路のデバッグというより面倒な作業は不要となる。
FPGAを利用するためのハードウェアとしては,XeonやOpteronなどのソケットにそのまま挿せるモジュールがDRC社から発売されている。このモジュールを使うと,たとえば4ソケットのOpteronサーバにおいて,そのうち2ソケット分をCPUからFPGAに変更し,アクセラレータとして使うことができる。この方式では,CPUボード上の高速・大容量メモリ(Opteronソケット用モジュールの場合,最大68GB,6.4GB/s)をFPGAから直接アクセスできること,隣のCPUとハイパートランスポートにより直接通信できることなどが挙げられる。FPGAとしては,最大規模のXilinx社Virtex 5 LX330の載ったモジュールが利用可能である。このほか,XtremeData社からは,Altera社のFPGAを使ったモジュール,Celoxica社からはOpteron用にHTXインタフェースを搭載したFPGAカードが発売されている。また,Nallatech社からは,PCIeボードなど,各種のボード製品が発売されている。AMD社は,Torrenza Initiativeで,これらのアクセラレータをサポートしており,Intel社もアクセラレータ用にソフトウェアのサポートを行っている。また,HP社も各種アクセラレータのサポートを積極的に行っており,CRAY社はXT5でDRC社のモジュールを採用している。
FPGAによる高速化の例としては,ImpulseCを用いてVirtex 4でモンテカルロ法によるオプションの価格評価を行った場合,CPU(Opteron)に対して最大20倍程度の高速化を達成できた。また,あるフォトリソグラフィにおける制御のための計算では,リアルタイムできわめて大量の計算が要求され,PCでは5000ノードが必要と見積もられたが,同じ性能を100ノードのFPGAクラスタで実現できた。また,Oak Ridge国立研究所では,ゲノム解析のためのFASTAベンチマークにおいて,Virtex 4 LX160を使うことによりPCの100倍,さらにこれを150個使うことでPCの7350倍の性能を達成している。
感想: FPGAを使った計算については,以前から興味を持ちながら,あまり情報収集ができずにいたが,本チュートリアルでは開発環境,ハードウェア製品,高速化の実例などについて最新の状況がわかりやすく紹介され,大変参考になった。HPC向けのアクセラレータとしては,Cell,GPU,ClearSpeedなどがよく取り上げられるが,これらは高速性のかなりの部分をSIMD型並列化に依存している。そのため,大規模データ並列が可能な応用には向いても,最適化における分枝限定法,グラフアルゴリズム,ある種の遺伝的アルゴリズムなど,本質的に条件分岐が多いプログラムの高速化には,必ずしも向かないと思われる。その点,FPGAは極めて自由度が高いことから,これらの応用も(特に浮動小数点演算をあまり必要としない場合は)大幅に高速化できる可能性がある。VHDLは思ったほど敷居が高くはないようなので,卒論/修論などで興味を持つ人がいたら,扱ってみたい。
(3) New Matrix Data Structures for Multi-core/Many-core Processors
Fred Gustavson (IBM Thomas J. Watson Research Center)
Fred Gustavsonは,行列計算において多階層キャッシュの有効利用を自動的に可能にする再帰的データ格納形式の提唱者である。今回は,マルチコア上での行列計算におけるデータ格納形式の重要性について講演した。最近のマルチコアプロセッサでは,少なくとも3つのメモリ階層を考慮することが必要であり,それぞれの階層に応じてTLBブロッキング,キャッシュブロッキング,レジスタブロッキングという技法が必要である。しかし,FortranやCの2次元配列は,全体行列から切り出したブロックの要素が連続アドレスにならないため,ブロッキングの適用にオーバーヘッドがある。
そこで,行列をまずブロックに分割し,各ブロック内でアドレスを連続とするブロック格納形式が優位となる。本形式では,各ブロックがメモリの別々の領域に格納されるため,マルチコア環境でのより良いスケーラビリティが実現できる。実際,DongarraらはCell上でのLINPACKの実装において,本形式の採用が性能上決定的に重要であると報告している。また本形式では,対称行列向けに下三角部分だけを格納する場合でも,性能のペナルティがほとんどない。さらに,従来の形式で格納された行列を転置する場合も,まずブロック格納形式に変換し,次いでブロックに対して転置を行い,最後に(転置された)従来の格納形式に戻すアルゴリズムが有効であることが示せる。
(4) New Parallel Variants of Dense Eigenvalue Solvers and Reordered Real Schur Forms
Bo Kågström (Umeå University)
非対称密行列に対する固有値解法の最近の進展について,著者らの寄与を中心に紹介があった。
まず,一般化固有値問題 Ax=λBx では,求解は (i) 行列束 (A, B) の同値な行列束 (H, T)(H: ヘッセンベルグ行列,T: 上三角行列)への変形,(ii) QZ法による (H, T) の固有値計算,(iii) 固有ベクトルの計算,の3つのステップからなる。このうち,(i) のステップに対して,BLAS3を効果的に利用できる2段型のアルゴリズムを開発した。また,(ii) のステップについて,標準固有値問題に対するQR法では,(a) 多数のシフトを用い,それらを2〜4個ずつ組にしてバルジ列として追跡するSmall-Bulgeマルチシフトアルゴリズムの導入,(b) シフト追跡に必要な対角ブロックのみを最初に更新し,非対角ブロックの更新を遅らせることでBLAS3の利用を可能にする遅延更新の導入,(c) 収束途上の行列から固有値を抽出することを可能にするAggressive Early Deflationの導入,の3点により,大幅な高速化が達成されているが,これらの技法がQZ法にも適用可能であることを示した。さらに,QZ法の分散メモリ上での並列化を行った。並列化では,バルジ列をさらに複数導入してアイドル状態のプロセッサをなくすこと,対角ブロックの更新で,複数のプロセッサにまたがるデータを1個のプロセッサに集めてから更新を行うこと,などの最適化を行った。この結果,ScaLAPACKの分散メモリ向けQR法(演算量はQZ法の1/2)と比べても,数分の1の時間で実行できるようになった。
また,制御理論の問題などで必要になるSchur形のリオーダリング(固有値の並べ替え)に対し,従来法よりデータ参照の局所性の高いアルゴリズムを開発した。これは,Schur形の行列の一部の固有値のみに対する固有ベクトルを計算するときにも有用である。
感想: 今回の話に出てきた基本的なアイディアは,2006年のSIAM meeting on Applied Linear Algebraで話された内容,およびKressnerの著書 [1] に述べられている内容と同じだったので,性能評価の部分を除いてあまり目新しさはなかった。ただ,Aggressive Early Deflationがクリロフ部分空間を使った加速と見なせるという指摘 [2] については,参考になった。また,行列束 (A, B) を (H, T) へ同値変形するアルゴリズムについては,最近著者らによる新しい進展 [3] があったようなので,論文を読んでみたい。
参考文献
[1] Bo Kågstrom and Daniel Kressner: "Multishift Variants of the QZ Algorithm with Agressive Early Deflation", LAPACK Working Notes, 173, Feb. 2006
[2] Daniel Kressner: "Numerical Methods for General and Structured Eigenvalue Problems", Springer-Verlag, 2005.
[3] Bo Kågström, Daniel Kressner, Enrique S. Quintana-Orti and Gregorio Quintana-Orti: "Blocked Algorithms for the Reduction to Hessenberg-Triangular Form Revisited", LAPACK Working Notes, 198, Feb. 2008.
(5) A Framework for Dynamic Node-Scheduling of Two-Sided Blocked Matrix Computations submission information
Lars Karlsson and Bo Kågström (Umeå University)
マルチコアのクラスタ上での線形計算を考える。この場合,もっとも簡単な並列化は,静的スケジューリングに基づき,ノード間で同期的通信,ノード内でfork-join型の並列化を行うことである。しかし,この方式で性能が出るのは,問題サイズが十分大きい場合に限られる。そこで,より複雑なスケジューリングを容易に実装するためのツールを開発した。本ツールでは,ユーザがアノテーションを付加したプログラムを入力とし,アノテーションをもとに処理ブロック間の依存関係を決定してDAG(Directed Acyclic Graph)で表現する。その結果に基づき,ノード間レベルでは静的なデータ/処理の分割を行い,ノード内では複数のコアに対して動的負荷分散を行う。
本ツールを,固有値計算のためのマルチシフトQR法に適用した。マルチシフトQR法は,対角ブロック内でのバルジ追跡から直交行列を決定し,それを非対角ブロックに左右両側からかけて更新演算を行うため,演算の依存関係が複雑である。依存関係を満たす更新演算の順序には様々なものがありうるが,すべてDAGから生成できる。本アルゴリズムでは,ウェーブフロントが反対角線に沿って動くような更新順序が最も効率がよい。最適なスケジューリングを行う際に考慮すべき点としては,並列性とオーバーヘッドのトレードオフ(→ タスク粒度の決定),データ再利用性と同期オーバーヘッドのトレードオフなどがある。
本ツールの課題としては,DAGの生成が逐次的な処理であってボトルネックになり得ること,依存関係の解析が十分でなく,不要な同期を挿入してしまう場合があることなどが挙げられた。
感想: 同期的通信とfork-join型の並列化の組み合わせは,プログラミングしやすいという利点はあるものの,小規模問題で性能が出にくいことはよく知られている。そのため,従来はLINPACKベンチマークにおける遅延更新のように,プロセッサごとに違う処理を行わせたり,非同期通信を導入するなどの最適化を手動で行ってきた。しかし,マルチコアのクラスタのようにマシンが複雑になると,手作業での最適化は非常に困難になる。本研究では,DAGを用いることでこのような最適化を自動化し,さらに動的スケジューリングと組み合わせることでマシンの性能を最大限に引き出すことを狙っている。自動チューニングの分野における,非常に重要かつ先端的な研究であると感じた。
ただ,ツールの入力となるプログラムの例が示されなかったため,どのようなアノテーションを付加しているのかがわからなかった。特に,依存関係を決定する単位である「処理ブロック」を,プログラム上でどのように定義し,ツールに教えているかを知りたい。また,1つのDAGから生成可能な様々なスケジューリングのうち,最適なものを決定するところまでをツールがやってくれるのかどうかを知りたい。たとえば,「ウェーブフロントが反対角線に沿って動く更新順序」というのは,ツールが自動的に発見したものなのかどうかがはっきりしなかった。「エキスパートの知識を利用可能」とも言っていたので,インタラクティブに最適なスケジューリングを探すのかもしれない。
なお,本研究では動的スケジューリングを前提としていたが,高精度の性能モデルと組み合わせることで,静的スケジューリングでも同様のことが可能ではないかと思われる。
参考文献
[4] Ernie Chan, Field G. Van Zee, Paolo Bientinesi, Enrique S. Quintana-Orti, Gregorio Quintana-Orti, and Robert van de Geijn: "SuperMatrix: A Multithreaded Runtime Scheduling System for Algorithms-by-Blocks." FLAME Working Note, 25, Aug. 2007.
(6) A Large-Grained Parallel Algorithm for Nonlinear Eigenvalue Problems Using Complex Contour Integration
Takeshi Amako, Yusaku Yamamoto and Shao-Liang Zhang (Nagoya University)
非線形固有値問題とは,パラメータzに依存する正方行列 A(z) が与えられたとき,ベクトルxに関する連立一次方程式 A(z)x=0 が0でない解を持つようなzの値を求める問題である。本研究では,この問題に対し,複素周回積分を用いた新しいアルゴリズムを開発した。このアルゴリズムは,A(z) の各要素がzの解析関数であるときに適用でき,(i) 複素平面上の閉曲線が与えられたとき,その内部の固有値をすべて求めることができる,(ii) 大粒度の並列性を持ち,グリッド環境で高い並列化効率を達成できる,という特徴を持つ。数値実験により,これらの性質を実際に確認した。
Q1: アルゴリズムの誤差解析は行ったか?
A1: 閉曲線内に重複固有値がない場合は,ほぼ解析ができており,ある条件の下で安定に固有値を計算できることが示せる。重複固有値がある場合については,さらに解析が必要である。
Q2: 具体的な応用を念頭においてやっているか?
A2: 理論流体力学における乱流のスケーリング指数の計算は,非線形固有値問題として定式化できる。これを最初の応用として念頭に置いている。
Q3: A(z)がzの解析関数でない場合には適用できないのでは?
A3: その通りで,従来法に比べて適用可能な問題が制限されるという弱点がある。しかし,上述のスケーリング指数の計算では,A(z) はzの解析関数となる。また,物理的に重要な問題で,解析性を持つ例が他にもいくつかある。
(7) Parallel Performance of CIRR Method with Complete Factorization Preconditioner on Multi-core
Tetsuya Sakurai, Masayuki Okada, Hiroto Tadano (University of Tsukuba) and Keita Teranishi (Cray Inc.)
大規模疎行列に対する一般化固有値問題 Ax=λBx を解く手法として,著者らによって提案されたCIRR(Contour Integral Rayreigh-Ritz)法がある。この方法は,Lanczos法やJacobi-Davidson法に比べて大粒度の並列性を持ち,かつ,スペクトルの内側の固有値を効率的に求めることができる。そのため,FMO-MO法によるたんぱく質の電子状態計算において,化学的に重要なHOMO(Highest Occupied Molecular Orbital),LUMO(Lowest Unoccupied Molecular Orbital)の軌道とエネルギーを求めるのに適した手法として,実用化に向けた研究が進められている。
本手法では,シフト量sのみが異なる多数の連立一次方程式 (A-sB)x=b(A: 対称,B: 対称正定値,s: 複素数)を解く必要がある。効率の観点から,これらの方程式をクリロフ部分空間法で解くことが望まれるが,FMO-MO法を使った場合,これらの方程式は非常に解きにくくなり,不完全分解前処理を使ったクリロフ部分空間法では収束しないことが経験的に知られている。一方,近似逆行列前処理は,A,Bの非ゼロ要素率がかなり高いことから,効率的でない。
そこで,あるカットオフ値を設けてA,Bの絶対値の小さい要素を強制的に0にし,疎性を増した行列に対して完全LU分解を行い,これをクリロフ部分空間法の前処理とする方式を開発した。これにより,今まで収束しにくかった問題も収束するようになった。さらに,A,Bに対してNested Dissectionオーダリングを行ってからLU分解することで,並列性も抽出できるようになった。本アルゴリズムを256CPUで実行し,良好な並列性能を得た。
感想: 複素周回積分を用いて一般化固有値問題を解くアルゴリズムは,著者らが2003年の論文で提案したが,それ以後,様々なグリッド環境・並列環境での効率的実装,実問題への適用,数値的安定性を劇的に改良したCIRR法の提案,誤差解析,アルゴリズム中で現れる連立一次方程式解法の効率化/安定化など,着実に進歩が続き,アルゴリズムの完成度が高まっている。ユニークな特徴を持つ日本発の固有値解法として,今後広まっていけばいいと思う。また,これらのアイディアの多くは非線形固有値問題にも適用できる可能性があり,今後試してみたい。
(8) Some Issues in Dense Linear Algebra for Multicore and Special Purpose Architectures
Marc Baboulin, Jack Dongarra and Stanimire Tomov (University of Tennessee)
マルチコアプロセッサや様々なアクセラレータ(Cell,GPU,FPGAなど)で性能を出すには,アルゴリズムの並列度を上げると同時に,計算の密度,すなわちデータアクセス量に対する演算量の比を上げることが重要である。現在,プロセッサは年59%の割合で性能向上しているのに対し,メモリは23%でしか高速化していないので,このことは今後更に重要になる。加えて,各演算コアは少量のローカルメモリしか持たないことが多いので,計算に必要なデータのブロックを小さく抑えることも必要である。さらに,メモリのアクセス時間を隠蔽するため,アルゴリズムは非同期性を持つことが望ましい。
これらの要請に応える線形計算のアルゴリズムとして,タイルアルゴリズム [5] がある。タイルアルゴリズムは,行列を正方形のタイルに分割し,各タイルに対する処理を行っていくことで,全体の処理が完了するようなアルゴリズムであり,各タイルに対する処理がBLAS3になっていれば,より望ましい。このようなアルゴリズムは,行列乗算やコレスキー分解に対しては古くから知られていた。さらに最近では,Allreduce algorithmの開発により,QR分解もタイルアルゴリズムとして定式化できるようになっている。タイルアルゴリズムでは,各タイルに対する処理をノードとするDAG(Directed Acyclic Graph)を作ることで,処理間の依存関係を解析し,演算コア間の負荷分散とスケジューリングを行える。なお,タイルアルゴリズムでは,タイルごとにデータが連続アドレスとなるブロック格納形式を採用することが,性能面から非常に重要である。
アルゴリズムによっては,タイル化が難しい場合もある。たとえば,部分ピボット選択付きLU分解では,ピボット選択の際に列全体を見る必要があり,タイル化できない。このような場合,基本的には処理をアクセラレータ側で行うが,処理できない部分のみをCPU側に戻して計算してもらうのがよい。うまく処理をオーバーラップすれば,CPU側での実行時間は隠蔽できる。一方,タイル化できるようにアルゴリズムを変更する方法もある。たとえば,絶対値に基づくピボット選択の代わりにランダム化を導入し,ピボット要素が極端に小さくならないことを期待するという方法である。これにはある程度理論的な裏付けもあり,実験でも良い結果が得られている。
感想: マルチコアやアクセラレータを活用した線形計算に関して最先端を行っているDongarraらのグループによる発表であり,興味深く聞いた。QR分解に対するAllreduce algorithmは,単純で応用範囲も広いアルゴリズムであるが,元の行列のサイズに対してタイルのサイズがあまりに小さくなると,誤差の累積が大きくなるので,きちんと事前誤差評価を行った上で使わなければならないと思う。ピボット選択をランダム化で置き換える話に関しては,アイディアだけでなく,それをガウス消去法の確率的誤差解析という数学的理論を使って裏付けている点に,研究の層の厚さを感じた。
アクセラレータを使ってプログラムを実行する場合,CPUの処理のうち重い部分をアクセラレータに投げるというよりも,基本的に処理はアクセラレータ側で行い,複雑な部分だけをCPUに投げ返すという考え方のほうが,データ転送が少なくて済み効率がよい。これはClearSpeedやGPUなどを使ってみて感じたことであるが,講演者もGPUについて同じことを言っていて,心強く思った。しかし,これが可能であるためには,アクセラレータ側が十分なメモリを持つ必要がある。むしろ,演算速度が速い分だけ,アクセラレータ側のメモリが多くてもよいのではないだろうか。NVIDIA社Teslaなど,メモリを多く積むアクセラレータボードも出てきつつあるが,このような考え方に立ったハードウェアがもっと出てくることを望みたい。
参考文献
[5] Alfredo Buttari, Julien Langou, Jakub Kurzak, Jack Dongarra: "A Class of Parallel Tiled Linear Algebra Algorithms for Multicore Architectures", LAPACK Working Notes, 191, Sept. 2007.
3. メモ
(1) 物価
びっくりするほど高く,何でも日本の3倍程度。もともとノルウェーは物価が高い上に,円が弱い(1ノルウェークローネ=22円)ことが重なっているのだと思う。市バスの初乗りが600円,500mlのファンタが500円,バーガーキングのチキンバーガーセットが1600円など。朝,ホテルのビュッフェでしっかり腹ごしらえをすることにした。
(2) 通貨
ロシアでの教訓を生かし,成田でちゃんと両替していった。ノルウェークローネなんて余ったら困るなと思っていたが,上記の通り物価が高かったので,まったくの杞憂だった。
(3) 食事
学会のランチで食べたサーモンの薄切りが,ねっとりしていて適度な塩気があり,とてもおいしかった。あと,パンはどこで食べてもおいしかった。
(4) 食事
街中はノルウェー語ばかりで,どこにも英語の表示がないのはやや不便かつ意外だった。でも,英語を話せば通じるので,不便はなかった。
(5) 会議の感想
並列処理の会議としては,数値計算,特に線形計算の比重が高く,聞きたい発表の多い会議だった。特に,マルチコアやアクセラレータ関係の発表が多く,自分がその分野に関係していることもあり,有益だった。
4. 写真
学会が行われた Norwegian University of Science and Technology の正面の建物(左),学内風景(中)および講演会場の建物(右)
橋から見た Trondheim の街の風景。大学は市街地からこの橋を渡ったところにある。
Trondheim の大聖堂(左,中)とステンドグラス(右)
乗り継ぎのため1泊したオスロにて
学会出張報告のページに戻る
Topに戻る