reduction

    0

    1答えて

    コードを並列化しようとしていますが、マップ内の挿入を並列にディスパッチするという問題を解決しました。しかし、プログラムは私に私がマップサイズの条件付きチェックに関連すると思うメモリエラーを与える。概念的なエラーがありますか、その部分も同期することは可能ですか? if (PERF_ROWS == MAX_ROWS) { int array_dist[PERF_ROWS]; #

    2

    1答えて

    私は相互依存関係のあるサイクルでループを並列化しようとしていますが、削減とコード作業を試してみましたが、結果は間違っています。正しいサイクルで配列を更新すると、ループを並列化する正しい結果を得る方法がありますか?プライベート句がsumに使用されてきたかのように #pragma omp parallel for reduction(+: sum) for (int i = 0; i < DATA_

    1

    1答えて

    this linkで説明した最初の問題の続きを取り上げます。 OpenCLで複数の合計を減らす方法を適用したいと思います(私のGPUデバイスはOpenCL 1.2のみをサポートしています)。 現在のところ、1回の合計削減(つまり、1回の繰り返し )のバージョンを作成しました。このバージョンでは、簡単にするために、順次CPUループを使用して各部分合計の合計を計算し、合計の最終値を取得しました。 私の

    5

    1答えて

    私はGPUでかなり標準的な問題を解決する必要がありましたが、私は実際のGPGPUには全く新しいので、この問題にアプローチするアイデアを探しています。 非常に少数のグループ(各ポイントは1つのグループに属しています)に割り当てられた3つのスペースに多くのポイントがあります。具体的にはこの場合15です(これは変更されません)。今私はすべてのグループの平均と共分散行列を計算したいと思います。グループの数

    0

    1答えて

    推力装置ベクトルを使用しない通常のCUDAコードを使用してカーネルを作成しました。カーネルは、デバイス上の配列、例えば配列Xに格納されたいくつかの結果を出力します。私は今、Xを減らしたいと思います。最初にXをスラストにコピーせずにthrust :: reduction関数を使用する方法はありますか:: device_vector変数?

    1

    1答えて

    radeon HD 7970 Tahiti XTでOpenCLを使用した2段階合計削減(このAMD linkから)に関するランタイムベンチマークを実行したいと考えています。 最初に、サイズの入力配列からサイズNworkItemsの出力配列への縮小を実行する最初のループを使用しないコードの最初のバージョンを使用しました。ここでカーネルのコードに、この最初のループは次のとおり int global_i

    2

    1答えて

    Nvidia Reductionのすべての最適化を実行しようとしています。私は最初の4つの部分を実装しましたが、スライド番号22の部分#5で立ち往生しています。 syncthreads()がなくても、提供されたコードが動作する理由はわかりません。スレッドは、出力内の同じメモリ位置にアクセスします。 また、スライドでは、変数がvolatileに設定されていないとコードが機能しないことが示唆されていま

    1

    2答えて

    CUDAデバイス上で配列の最小値または最大値を見つけるには、並列縮小を実行する必要があります。私は推力と呼ばれるこのための良い図書館を見つけました。ホストメモリ内の配列に対してのみ並列リダクションを実行できるようです。私のデータはデバイスメモリにあります。デバイスメモリのデータを減らすことは可能ですか? 私はこれを行う方法を理解することはできません。スラストのドキュメントはhttp://code.

    2

    1答えて

    私は削減を使ってCUDAでこの操作を実行する方法を考えていましたが、それを達成する方法について少し迷っています。 Cコードは以下の通りです。注意すべき重要な部分 - 変数precalculatedValueは、とループイテレータに依存します。また、変数ngoは、mのすべての値に固有のものではありません。 メートル = 4,5,6,7,8、私は場合に、ループイテレータのサイズが含まれている等NGO

    8

    1答えて

    sse組み込み関数を使用してfloatベクトルの合計要素(削減)を取得するにはどうすればよいですか? シンプルなシリアルコード:通常 void(float *input, float &result, unsigned int NumElems) { result = 0; for(auto i=0; i<NumElems; ++i) result += inpu