0

これは、自動並列化に関するウィキペディアの記事からのものです。

コンパイラまたはツールによる自動並列化は、次の理由により非常に困難です[2]。

  1. 依存関係の分析は、間接アドレス指定、ポインター、再帰、および間接関数呼び出しを使用するコードでは困難です。

  2. ループの反復回数は不明です。

  3. グローバル リソースへのアクセスは、メモリ割り当て、I/O、および共有変数に関して調整が困難です。

ご覧のとおり、最初のポイントの問題は主にプログラミング言語に関係しています。C/C++ には、ポイント 1 で述べたすべての問題があります。私の質問は、C/C++ に近いが、これらの問題がない言語があるかどうかです。Fortran が請求書を満たしていることは知っていますが、C/C++ とはかけ離れたものではありません。

4

3 に答える 3

3

There are several standards that introduce syntax for parallelization in C and C++. One example is Unified Parallel C, another is openCL, through both have vastly different purposes.

The one that probably best fits your bill is OpenMP. It extends the C and C++ language so you can tell the compiler to parallelize your code (and where to do it).

Functional programming languages (e.g. Lisp, Haskell and F#) are by their very nature highly and automatically parallelizable, but are also vastly different from procedural and OOP languages like C and C++

于 2012-06-01T21:10:26.827 に答える
3

FORTRAN にはいくつかのユニークな機能があり (おそらく、機能の欠如として説明するのが最も適切です)、クリーンで自動の並列化を可能にします。ただし、FORTRAN への最近のすべての追加により、言語の現代的な同等物がそのような区別を維持しているかどうかは明らかではありません。

C や C++ と比較する限り、FORTRAN は論理構造の観点からはそれほど遠く離れていません。ただし、洗練されたデータ構造を行うために、FORTRAN のルートは、いくつかの関連する配列にわたって構造を格納し、特定のフィールドを「次の」インデックスとして使用する傾向がありました。これによりポインターが回避されましたが、同様の柔軟性が提供されました。

ハッシュテーブル、ツリー、およびその他の構造の FORTRAN 実装は、私がこの言語をもっと扱っていたときに見たことがあります。しかし、そのようなコードを簡単に表現できるように書かれていないことは間違いなく、そのようなコードを並列化するのは難しいと思います。

于 2012-06-01T21:28:25.980 に答える
0

GPUでの並列化をお探しの場合

MicrosoftのAMPがあります

PGIコンパイラおよび将来的にはより多くのコンパイラがOpenACCのようなopenmpをサポートする予定です

Capsは、 HMPPと呼ばれるコンパイラのような別のopenMPもリリースしました。

于 2012-06-01T22:32:41.767 に答える