6

現在、次のような並列 for ループがあります。

int testValues[16]={5,2,2,10,4,4,2,100,5,2,4,3,29,4,1,52};
parallel_for (1, 100, 1, [&](int i){ 
    int var4;
    int values[16]={-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1};
    /* ...nested for loops */
        for (var4=0; var4<16; var4++) {
            if (values[var4] != testValues[var4]) break;
        }
    /* ...end nested loops */
}

私ができることは、リソースを追加することだけであるという点まで、できる限り最適化しました。

GPU を利用してタスクを並列処理することに興味があります。このような恥ずかしい並列タスクは、最新の GPU を非常に効果的に利用できると読んだことがあります。

任意の言語を使用して、このような単純な並列 for ループに GPU を使用する最も簡単な方法は何ですか?

GPU アーキテクチャやネイティブ GPU コードについては何も知りません。

4

3 に答える 3

2

Li-aung Yip がコメントで述べたように、GPU を使用する最も簡単な方法は、配列操作をサポートし、自動的に (多かれ少なかれ) それらを GPU に移動する Matlab のようなものを使用することです。しかし、それを機能させるには、コードを純粋な行列ベースの操作として書き直す必要があります。

それ以外の場合、ほとんどの GPU の使用には依然として CUDA または OpenCL でのコーディングが必要です (AMD カードで OpenCL を使用する必要があります)。お気に入りの言語のラッパーを使用したとしても、GPU で実行される実際のコードは通常、OpenCL で記述されています (漠然と C に似ています)。そのため、これにはかなりの量の学習/努力が必要です。AMDからOpenCLをダウンロードし、ドキュメントを読むことから始めることができます...

どちらの選択肢も、新しいアイデアを学ぶ必要があると思います。あなたが本当に欲しいのは、高レベルでありながら伝統的な外観の、GPU を対象とした言語だと思います。残念ながら、それらはまだあまり存在していないようです。私が考えることができる唯一の例はtheano です- あなたはそれを試すかもしれません. そこにいても、まだpython/numpyを学ぶ必要があります.theanoの実装がどれほどしっかりしているかはわかりませんが、それは最も苦痛の少ない方法かもしれません.簡単ですが、概念的に把握するのが非常に難しいと感じる人もいます)。

ps gpuがあなたの問題を解決するかどうかは私にはわかりません。

于 2012-04-10T12:28:36.503 に答える
1

配列の火をチェックアウトすることをお勧めします。

http://www.accelereyes.com/products/arrayfire

openCL を使用する場合は、さまざまなデバイス ベンダー、Intel、AMD、および Nvidia 用に個別の実装をダウンロードする必要があります。

于 2012-04-23T21:24:51.467 に答える