コンピューティング環境が、従来の CPU だけで処理される時代から変化しようとしています。電力効率の問題を内在しメモリ帯域幅の制約から「CPU 自体の性能向上」が期待できない中で、GPU や DSP と言った、今まで特殊用途のプロセッサを利用し、汎用的な処理を行うソフトウェア環境が整備されつつあります。ここでは、こうした異種プロセッサを活用する「ハイブリッド・コンピューティング」のソフトウェア環境の一つである、OpenACC (Open Accelerator) の使用法に関して纏めます。OpenACCは、2008 年から PGI が取り組んだ PGI Accelerator Programming Model の考え方を踏襲し、2011 年に新しく標準規格化されたものです。OpenMP のようなディレクティブ・ベース(ソース上に指示行を挿入する形態)のプログラミング手法を採用し、GPU
OpenMP support in Clang compiler is completed! Every pragma and clause from 3.1 version of the standard is supported in full, including combined directives (like ‘#pragma omp parallel for’ and ‘#pragma omp parallel sections’). In addition, some elements of OpenMP 4.0 are supported as well. This includes “almost complete” support for ‘#pragma omp simd” and full support for ‘#pragma omp atomic’ (c
はじめに CPUは、コンピューターの頭脳です。単純に考えると、頭脳が2つあれば、1つの時と比べて、同じ時間でたくさんのことを考えることができそうです。10年ほど前、Intel製プロセッサーPentium IIの頃から、1枚のボードに複数のCPUを載せて高速化する試みがなされました。Intel製CPUでは2ユニットまででしたが、SUN Microsystems製のコンピューターでは、もっとたくさんのユニットを載せることができていました。今では、CPU自体に複数の「コア」を載せ、1ユニットで同時に別々のことを実行できるようになっています。 ハードウェアが、同時に複数のことを実行できるようになったため、ソフトウェアもそれに対応する必要が出てきました。本記事では、昨今あちらこちらで声高に繰り返される、「並列処理化すれば速くなる」に疑問を持ったため、それを検証することにします。 対象読者 なんといっ
はじめに この連載は、OpenMPを通じて並列処理の考え方をお伝えすることを目的としています。マルチコアCPUが既に普及していますので、今後は並列プログラミングが一般的なものとなり、さまざまな技術が登場するでしょう。その時並列プログラミングの根底に流れる考え方を身に付けられていれば、比較的容易に新技術も習得することができるでしょう。 今回は並列プログラミングに役立つ実行時ライブラリの関数と並列ループについて解説します。この連載で解説に使用するサンプルコードはあくまでもOpenMPの基礎を理解するためのものであり、実務でOpenMPを使用する際にはよく理解してから用途に適したプログラミングを行ってください。 対象読者 筆者が想定している読者はCの基本的文法をマスターし、並列化プログラミングに興味を持っている方です。凝ったテクニックを極力さけ、基本的な文法さえ分かれば読めるように注意しますので
OpenMP(Wikipedia)とは、 並列コンピューティング環境を利用するために用いられる標準化された基盤(API)です。 このページでは OpenMP C/C++ API 2.0 を対象としています。 OpenMP - 並列処理の留意点 (別ページ) 導入編 gcc(gcc) の場合 gccはバージョン4.2からOpenMPに正式対応しました。 コンパイルオプションに ''-fopenmp'' を付けてコンパイルします。 Visual Studio(cl) の場合 Visual Studio 2005 ProからOpenMPがサポートされたことにより、手軽に並列処理のコードを書くことが可能になりました。 ここではVisual Studio 2008 Proでの設定方法を示します。 メニューから ["プロジェクト名"のプロパティ] → [構成プロパティ] → [C/C++] → [言語
はじめに 昨今マルチコアCPUは一般化し、並列化処理の重要度がどんどん高まってきました。この流れはもう変わらないでしょう。ですから、我々開発者にとって並列処理の知識は絶対に必要なものです。とはいえ、日々の業務をこなしつつ資料が少ない並列化処理を身につけることは大変です。 そこで今回筆者は、並列化処理を実現するOpenMPの入門記事を書くことにしました。OpenMPを選択した理由は、一番効率が求められているのはC/C++プログラマーだと考えたからです。C/C++プログラマーの方々が並列処理を習得するお手伝いができれば幸いです。 なお、この連載で解説に使用するサンプルコードはあくまでもOpenMPの基礎を理解するための便宜的なものであり、実務でOpenMPを使用する際にはよく理解してから用途に適したプログラミングを行ってください。 対象読者 筆者が想定している読者はCの基本的文法をマスターし、
OpenMP は共有メモリ並列プログラミングの標準 API である。ここでは C/C++ 版を紹介する。Fortran 版もある。 OpenMP は自動並列化ではない。依存性の分析と解決はプログラマに任されている。使い方を間違えば、当然正しくない結果を出す。 #include <omp.h> OpenMP を使うときにはインクルードする。 _OPENMP OpenMP コンパイラが define するマクロ。 #pragma omp parallel 節 次の行から始まるブロックを並列に(重複して)実行する。 スレッドの数は num_threads 節か、omp_set_num_threads 関数か、環境変数 OMP_NUM_THREADS で指定する。 Parallel 指示行の時点で既に定義されている変数と、ブロック内でもstatic 宣言されている変数は
OpenMPは複数のCPU(複数コアを含む)を持った計算機上での並列化に威力を発揮する。 OpenMPを使う最大の利点は、OpenMPに対応したコンパイラであれば、非常に簡単に並列化できる点である。 現在、gcc、Visual C++、およびIntelコンパイラなど主要なコンパイラはOpenMPに対応している。 習得も他の並列化技法に比べて比較的容易である。 なお、速度を最優先にする場合、単一コンピュータ上で動かした場合でも、メモリのローカリティのためかOpenMPよりMPIの方が効率のよいことが多い。MPIに関してはこちらを参照。 なお、インテルがOpenMP初心者向けに非常にわかりやすい文書を公開している。 OpenMPプログラムのコンパイル OpenMPの各種関数を使わない場合、#pragma ompで始まる指示をソースコード内に書き込み、下記のコンパイルスイッチをつけてコンパイルす
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く