異なるハードウェアのプログラミングモデル

これが正しい場所かどうかは本当に分かりません。私は、さまざまなタイプのハードウェアの異なるプログラミングモデルに興味があります。

このように始まり、NVIDIA CUDAを使って作業していたことを発表していました。 GPUをコプロセッサとして使用する際の主な問題の1つは、ホストとの間でデータをやりとりする必要があるということです。その後、いくつかの人々がAMDの「APU」と、グラフィックス・コアが通常のCPUコアと同じダイ上にあるということについて私に質問しました。

Intel/AMD CPU + GPUチップに専用NVIDIAカードと同数のグラフィックス・コアが含まれないことを指摘して、私はこの質問を避けました。

問題は、プログラミングモデルがAMD APUやIntel Sandy/Ivy Bridgeチップのためにどのようなものか分かりません。

私の質問は次のとおりです:

  1. プログラムはどのようにAMD/Intelチップ上のグラフィックスコアを利用するように書かれていますか?
  2. これらのグラフィックスコアは本当にホストメモリに直接アクセスできますか?
  3. SPおよびDP FLOPSでのこれらのチップのパフォーマンスの種類に関する情報はありますか?
  4. CUDAから来て、NVIDIA GPUと他のチップのプログラミングの間には、どのような類似点がありますか?
  5. CellプロセッサのSPEはメモリにどのようにアクセスしましたか、またはプログラミングモデルはどのようにこれらのIntel/AMDチップと今日比較されましたか?
3
「Intel/AMD CPU + GPUチップには、専用のNVIDIAカードと同数のグラフィックスコアは含まれません。決して?多分今日ではないかもしれませんが、CPUに組み込まれたGPUが専用のGPUと同じ数のコアを持つことができないという技術的理由はありません。
追加された 著者 vocaro,

3 答え

プログラムはどのようにしてAMD/Intelチップのグラフィックスコアを活用するように書かれていますか?

OpenCL、しかし、私はインテルが仕事をしたとは思わないグラフィックスコアを使用する

これらのグラフィックスコアは本当にホストメモリに直接アクセスできますか?

はい、ただし、いくつかの注意点があります。

  1. Whilst the bandwidth to host memory is better than over PCI-e, it's not as much as a GPU has to graphics memory (3-4x difference).
  2. OpenCL might require it's own copy of the data in some circumstances. For a GPU this has to happen (Host Mem -> Graphics Mem), for an APU you want to try to make sure it doesn't. This pretty much comes down to how you allocate your buffers as I understand it.

基本的には、妥協の条件を変更しました。以前は、GPUに何かを送信している間に作業項目を十分に大きくする必要があるほど、起動コスト(グラフィックスメモリへのデータのコピー)が十分に重要であった。そのコストは今下がりました(コピーなし)が、コアのパフォーマンスは低くなりました(それらの数は少なく、メモリ帯域幅は小さくなりました)。

GPGPUのテクニックをより多くの状況で価値のあるものにする興味深い開発ですが、そのような巨大なという利益はありません。しかし、利益はまだ大きくなります。

SPおよびDP FLOPSでのこれらのチップのパフォーマンスの種類に関する情報はありますか?

I'm loathed to repeat marketing numbers, but an AMD A8-3850 has a headline figure of 480 GFLOPS

CUDAから来て、NVIDIA GPUと他のチップのプログラミングの間に、どのような類似点があるのでしょうか?

私はCUDAを使用していないので、他の人が答えたいと思うかもしれませんが、CUDAとOpenCLは同じ概念(メモリモデル、カーネルなど)をたくさん持っていますが、CUDAはOpenCL does not(C ++ - isms)

次に、NVIDIAのコアがスケーラであり、AMDがベクタなので、NVIDIAとAMDのアーキテクチャ上の違いがあります。したがって、AMDで最高のパフォーマンスを得るには、ベクター化されたコードを書く必要があります。

2
追加された

私はCUDAの経験があり、答えはその経験と私がちょうどクイックサーチをしたことに基づいています(私もいくつかの答えを知りたい)。

  1. 同じように書かれていると思います。 OpenCLをすべて使用することはできますが、同じ原則に従うハードウェアの実装に違いがあります。

  2. AMDとIntelのための仕組みはわかりませんが、私は「はい」と言います。あなたはCUDAでそれを行うことができます。マップされたページロックされたホストメモリを使用すると、カーネルから直接ホスト上のメモリにアクセスできます。 NVIDIAは統合されたNVIDIAシステム(CUDA Cプログラミングガイドのセクション5.3.1)がある場合、この方法でメモリを使用することを推奨します。

  3. はい。インテルについては、インテルHDグラフィックスDirectX開発者ガイド(Sandy Bridge)(11インテルインテルHD3000)。 AMDの場合、各カードの仕様ページにいくつかの価値を置いています。例 AMD Radeon HD6990 。おそらくどこかで比較を見つけることができます。

  4. プログラミングモデルが似ていると私が言ったように、OpenCLにはカーネル、ホスト、デバイスのメモリとスレッドとワーキンググループの識別子という概念があります。パフォーマンスを最大限にするには、特定のアーキテクチャについて何かを知る必要がありますが、すべて同様のアプローチを使用して作業することができます。

  5. いいえ...

1
追加された

私はBigdataでOpenCLで仕事をしています。

AMD/Intelチップ上のグラフィックスコアを利用するプログラムの作成方法は?

OpenCLは、異種環境で動作する低レベルプログラミングモデルです。 これは、システム内のすべての計算リソースを使用するように構築されています。 CPU、GPU、APU、FPGAなど.CPUのGPUおよびコア上で動作するカーネルとも呼ばれるOpenCLコードプログラム。

インテルはGPUではなく、そのプロセッサで知られていますが、インテルGMAやインテルHDグラフィックスのようにかなり長い間GPUを提供しています。

1
追加された