問題タブ [vexcl]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - VexCL、Thrust、Boost.Compute の違い
これらのライブラリをざっと理解しただけでは、それらは非常に似ているように見えます。VexCL と Boost.Compute はバックエンドとして OpenCl を使用し (v1.0 リリースの VexCL はバックエンドとして CUDA もサポートしていますが)、Thrust は CUDA を使用することを知っています。さまざまなバックエンドは別として、これらの違いは何ですか。
具体的には、どのような問題領域に対処し、なぜ一方を他方よりも優先して使用する必要があるのか.
また、Thrust FAQ には、次のように記載されています。
OpenCL サポートの主な障壁は、C++ テンプレートをサポートする OpenCL コンパイラとランタイムがないことです。
この場合、VexCL と Boost.Compute が存在する可能性はありますか。
c++ - VexCL での作業「バイナリのコンパイル」
「顧客に配布される」プログラムを作成したいので、カーネルコードをハッカーから保護したいですAMDデバイス」
私はまだ VexCL の経験がないので、バイナリを配布するための適切なコンパイル行は何ですか?
たとえば、CUDA では次のように入力できます: nvcc -gencode arch=compute_10,code=sm_10 myfile.cu -o myexec
VexCL の等価物は何ですか?
また、VexCL は Mac OS で動作しますか?どの IDE ですか? (私は以前に Mac OS の経験がなかったので、これは将来の課題です)
私の以前のOpenCLの経験は、STDCLライブラリを使用することでした「しかし、Windowsではバグがあり、Macはサポートされていません」
c++ - odeint と VexCL を使用した Lorenz の例で、デバイスごとに異なる結果が得られる
アップデート:
この例を他のシステムで実行しました。Intel i7-3630QM、Intel HD4000、および Radeon HD 7630M では、すべての結果は同じです。i7-4700MQ / 4800MQ では、OpenCL または 64 ビット gcc を 32 ビット gcc から使用すると、CPU の結果が異なります。これは、デフォルトで SSE を使用する 64 ビット gcc および OpenCl と、387 math を使用する 32 ビット gcc の結果です。-mfpmath=387 が設定されている場合、少なくとも 64 ビット gcc は同じ結果を生成します。そのため、さらに多くの情報を読み、x86 浮動小数点を試してみる必要があります。回答ありがとうございます。
「CUDA と OpenCL のプログラミング: 最新の C++ ライブラリを使用したケーススタディ」の Lorenz システムの例を、それぞれ異なる OpenCL デバイス上の 10 個のシステムに対して実行しましたが、異なる結果が得られています。
Quadro K1100M (NVIDIA CUDA)
r => xyz
0.100000 => -0.000000 -0.000000 0.000000
5.644444 => -3.519254 -3.5192504.644452 11.188890
=> 5.212534 5.212530 10.188904 16.73334
= 6.4734 = 6.4734 = 6.4734 = 6.4734 = 6.473433737373737373737373737373734367373737347334>22.277779 => 3.178553 2.579687 17.946903
27.822224 => 5.008720 7.753564 16.377680
33.366669 => -13.381100 -15.252210 36.107887
38.911114 => 4.256534 6.813675 23.838787
44.455555 => -11.083726 0.691549 53.632290
50.000000 => -8.624105 -15.728293 32.516193インテル(R) HD グラフィックス 4600 (インテル(R) OpenCL)
r => xyz
0.100000 => -0.000000 -0.000000 0.000000
5.644444 => -3.519253 -3.519250 4.644451
11.1888890 => 5.212531 5.212538 10.188888888888888888888890
16.733334 = 15.47326> 15.47326> 15.4732622.277779 => 7.246771 7.398651 20.735369
27.822224 => -6.295782 -10.615027 14.646572
33.366669 => -4.132523 -7.773201 14.292910
38.911114 => 14.183139 19.582197 37.943520
44.455555 => -3.129006 7.564254 45.736408
50.000000 => -9.146419 -17.006729 32.976696Intel(R) Core(TM) i7-4800MQ CPU @ 2.70GHz (Intel(R) OpenCL)
r => xyz
0.100000 => -0.000000 -0.000000 0.000000
5.644444 => -3.519254 -3.519251 4.644453
11.188890 => 5.212513 5.212507 10.188900
16.733334 = 6.4734 = 6.4734 =>22.277779 => -8.295195 -8.198518 22.271002
27.822224 => -4.329878 -4.022876 22.573458
33.366669 => 9.702943 3.997370 38.659538
38.911114 => 16.105495 14.401397 48.537579
44.455555 => -12.551083 -9.239071 49.378693
50.000000 => 7.377638 3.447747 47.542763
ご覧のとおり、3 つのデバイスは R=16.733334 までの値で一致し、その後発散し始めます。
VexCL なしで odeint を使用して同じ領域を実行し、CPU 実行で OpenCL の結果に近い結果を得ました。
バニラ風味:
サンプル コードは次の場所にあります: https://github.com/ddemidov/gpgpu_with_modern_cpp/blob/master/src/lorenz_ensemble/vexcl_lorenz_ensemble.cpp
ここで何を見ているのかわからないのですか?CPU の結果は互いに非常に近いため、GPU の問題のように見えますが、私は OpenCL の初心者なので、この根本的な原因を見つける方法についていくつかの指針が必要です。
c++ - VexCL: 最小値を超えるベクトル内の値の数をカウントします
C++ で VexCL を使用して、特定の最小値を超えるベクトル内のすべての値をカウントしようとしています。このカウントをデバイスで実行したいと考えています。デフォルトのリダクターは、MIN、MAX、および SUM のメソッドのみを提供します。例では、そのような操作を実行する方法が明確に示されていません。このコードは、おそらくデバイスではなくホストで実行されるため、低速です。
私が使用しているベクトルは、大量の値、たとえば数百万とほとんどゼロで構成されます。最小値を超える値の量に加えて、これらの値を含むベクター ID のリストも取得したいと考えています。これは可能ですか?
c++ - 構造体の VexCL ベクトル?
したがって、OpenCL でカスタム型を使用できることはわかっています。しかし、私はそれらを VexCL で使用できませんでした。構造体のデバイス ベクターの作成は正常に機能しますが、操作を実行できません。
VexCL でカスタム タイプを使用する例を見つけられなかったので、私の質問はそれが可能でしょうか? 前もって感謝します。