問題タブ [arrayfire]
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.
cuda - OpenCL は GTX Titan で CUDA の 2 倍遅い
ArrayFire に実装したばかりのビーム伝搬アルゴリズムがあります。GTX Titan カードで OpenCL バックエンドを使用していました。OpenCL では、毎分約 25,000 ステップで実行されていました。次に、それを CUDA バックエンドに切り替えたところ、パフォーマンスは毎分約 50,000 ステップまで上がりました。これは少し意外でしたが、OpenCL では利用できないより高度な機能を使用している可能性があると考えました。次に、GTX 960 カードを使用して同じテストを実行しました。OpenCL では 1 分あたり約 22,000 ステップ、CUDA では 23,000 ステップで実行されました。タイタンと同じパターンになると思っていたので、これは困惑しています。また、GT 730M を使用しているラップトップで 2 倍のパフォーマンスの変化を見たと思います。nvidia が一部のカードで OpenCL を遅くすると聞いたことがあります。彼らは700シリーズのためにこれをしますか?
arrayfire - ArrayFire に畳み込みニューラル ネットワーク バックプロップを実装する (勾配計算)
MxN 畳み込みカーネルを中央に配置するために、 http: //www.deeplearningbook.org/contents/convnets.html の式 9.12 を変更しました。
1 つの入力チャネルと 1 つの出力チャネルを (単純化するために) 仮定すると、勾配の次の式が得られます (今のところは信じてください)。
上記を読むと、krow、kcol での dK の 1 つの要素は、G とシフトされた V の積のすべての行と列の合計に等しくなります。G と V は同じ次元を持つことに注意してください。V の外に出てゼロになるように定義します。
たとえば、1 つの次元で、G が [abcd]、V が [wxyz]、M が 3 の場合、最初の合計は dot (G, [0 wxy])、2 番目の合計は dot (G, [wxyz] です。 ])、3 番目の和は dot (G, [xyz 0]) です。
ArrayFire にはシフト操作がありますが、挿入ゼロのシフトではなく循環シフトを行います。また、カーネル サイズ MxN は通常小さい (たとえば 7x7) ため、より最適な実装では G と V を 1 回だけ読み取り、カーネル全体に累積するように思われます。
その 1D の例では、a と w,x を読み込み、[a*0 aw ax] で開始します。次に、b,y を読み込み、[bw bx by] を追加します。次に、c,z を読み込み、[cx cy cz] を追加します。次に d を読み込み、最後に [dy dz d*0] を追加します。
ArrayFire で dK を計算する直接的な方法はありますか? これはある種の畳み込みだと思わざるを得ませんが、畳み込みがどのようになるかについて頭を悩ませることができませんでした。
c++ - Linux での ArrayFire 用の Eclipse のセットアップ
ArrayFire ユーティリティを使用して C/C++ アプリケーションをコンパイルおよび実行するために、Ubuntu 14.04 で Eclipse (Mars 2.0) をセットアップしようとしています。私は既に ArrayFire を /opt/ARRAYFIRE/arrayfire-3 にコンピューターにインストールしており、最初に Eclipse を使用して ArrayFire のパフォーマンスをテストする非常に単純な例を試しています。
簡単な C++ テスト コードを作成しました。
ArrayFire のすべてのインストール手順 (前提条件を含む) に従いました。次に、Eclipse プロジェクトの C/C++ ビルド設定に ArrayFire ヘッダー "include" (-l) とライブラリ "lib" (-L) インストール ディレクトリ パスを設定します。
私の特定のケースでは:
- GCC C++ コンパイラの場合 -> インクルード: /opt/ARRAYFIRE/arrayfire-3/include
- GCC C コンパイラ -> インクルード: /opt/ARRAYFIRE/arrayfire-3/include
- GCC C++ リンカー -> ライブラリ: /opt/ARRAYFIRE/arrayfire-3/lib
これは、私が常に新しいライブラリに対して行ってきた通常の手順です。ただし、gcc でコンパイルしようとすると、次のエラーが発生します。
(スペイン語でごめんなさい) "sin definir" = 定義されていません。
ヘッダーが適切にリンクされていることはわかっています。これは、宣言を確認でき、コンパイラーが適切に機能するためです。ただし、リンカーは失敗します。
何が問題なのか、何が起こっているのか、誰にも分かりますか?
opencl - OpenCL で ArrayFire を使用するとエラーが発生する
ArrayFire を正常にインストールし、Visual Studio 構成 CUDA_x64 を選択すると、サンプルの helloworld が正常に動作します。ただし、OpenCL_x64 に変更すると、コンパイルは成功しますが、次のような実行エラーが発生します。
/**************************************************** ********************/
/**************************************************** ********************/
どんな答えでも大歓迎です。前もって感謝します。
performance - ArrayFire.jl setindex! 非常に遅い
そこで、ArrayFire.jl を使用して Julia コードの速度を上げようとしていますが、代わりに速度を落とすだけです。を使用@profile
して、問題を まで追跡しましたsetindex!
。テストコードは次のとおりです。
これら 2 つの速度の違いは5桁です。
プロファイラーによると、setindex!
本当に遅い理由はaf_assign_gen
とaf_sum_all
が本当に遅いからです。
何か不足していますか?私は GPGPU プログラミングの完全な初心者なので、これがどのように機能するのかを理解していない可能性があります。
arrayfire - ArrayFire で配列を使用してベクトル コンポーネントを乗算する
ベクトル コンポーネントを配列で乗算しようとするとエラーが発生します (要素単位の乗算またはブロードキャスト)。ドキュメントは、このオーバーロードされた * のケースが問題ないことを示しています。
AFAPI 配列 演算子* (const float &lhs, const array &rhs)
2 つの配列、または配列と値を乗算します。(定数配列&、定数配列&)
しかし、以下のエラー メッセージによるとvect(0)
、サイズが一定になるように、さらに平坦化または縮小する必要があるのではないでしょうか?
エラーステートメントは明らかです:
引数 1 の次元が無効です予期された: ldims == 乗り物
以下はコードです:
出力の生成:
ArrayFire v3.3.2
ATI Radeon HD 6750M行列
[3 3 1 1]
0.0000 0.0000 0.0000
0.0000 0.0000 0.0000
0.0000 0.0000 0.0000ベクトル
[5 1 1 1]
1.0000
2.0000
3.0000
4.0000
5.0000vect(0)
[1 1 1 1]
1.0000
マトリックス = [3 3 1 1]、および vect(0) = [1 1 1 1] に対する af_print() の dims() 出力は疑わしいですが、さらに平坦化する方法がわかりません。この例は、ArrayFire API を使用する一般的な方法であると考える人もいるでしょう。
スローされるエラー例外は次のとおりです。
libc++abi.dylib: タイプ af::exception のキャッチされない例外で終了します: ArrayFire 例外 (無効な入力サイズ: 203): 関数 getOutDims 内 ファイル src/backend/ArrayInfo.cpp:173
引数 1 の無効な次元 予期される: ldims == 乗り物
関数内 af::array af::operator*(const af::array &, const af::array &)
明確にするためにユース ケースを追加します 。実際には、coeff(k) * (3 次元配列 Z の 2 次元スライス) の合計によって最終的な配列を構築しています。
の使用を検討しますgfor
が、最初は正しい数値出力を得たいだけでした。ベクトル: は事前定義されていることにも注意してくださいindex
。たとえば、index = {1, 2, 4, 7, ...}
要素は必ずしも連続しているとは限りません。これにより、特定の用語を選択できます。
c++ - 単純な arrayfire コンストラクターからセグメント フォールトを取得する
単純な arrayfire コンストラクターを呼び出すと、セグメンテーション違反が発生します。