問題タブ [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.
c++ - ArrayFire 3D 配列をシフトする方法
私には1つの問題があります。Yには3D ArrayFire配列があり、各スライスを特定の量だけシフトする必要があります。ArrayFireにはこれを行う機能が付属していますが、いくつかのことを理解していません。コードはこのようなものですが、うまくいかないようです。shi配列をf.slice(i)に割り当てる違法なことをしていると思います。配列 V は、x 方向と y 方向のシフトです。
どんな助けも本当に感謝しています/*私の英語があまり上手でなくてごめんなさい*/
ありがとう!
opengl - ArrayFire から AMD の OpenGL へ?
AMD グラフィックス カードを使用して、ArrayFire から OpenGL に移行したり、元に戻したりすることはできますか?
CUDA を使用してそれを行う方法に関する記事があります。クロスプラットフォームで使用できるように、OpenCL に同様の方法を使用するためのヒントはありますか?
アップデート
最後にやりたいことは、af::array を取り、それを OpenGL テクスチャに変換し、カスタム シェーダで画面または別のテクスチャにレンダリングすることです (Qt などの特定の OpenGL コンテキストを想定)。
c++ - ArrayFire Memcpy
ArrayFire ライブラリとメモリの使用に関する質問があります。プレーンな CUDA/C でいくつかのプログラムを実装し、ArrayFire を使用して同じプログラムを実装しました。CUDA/C プログラムははるかに高速です (ArrayFire のものよりも 5 倍高速です)。
両方で Nvidia プロファイラーをチェックしましたが、主な違いは memcpy 操作です。ArrayFire の場合、多くの Memcpy 操作があり、それ以外の場合は、プログラムの最初にいくつかあります。いくつかのテストを行うと、次のようなことを行うことがわかりました:
f、q配列であると、このmemcpy呼び出しがより多く生成されます...これが、ArrayFireコードのパフォーマンスが向上しない理由だと思います。なぜこれが起こるのですか?どこから、このすべての Memcpys が来たのですか? どうすれば回避できますか?***** // コードの断片を //// 編集する
f は 4 次元配列です。そして、私はこの関数を他の for ループ内に持っています。関数を次のように変更すると:
プロファイラーは、memcpys の大規模な使用を示していません。私の問題は、配列に新しい値を代入する正しい方法を見つけることだと思います...おそらくA = Bを使用するのは最善ではありませんが、まだ学ぶことがたくさんあります...
ご清聴ありがとうございました。さらにコードが必要な場合はお知らせください。ありがとう !
c++ - ファイルから ArrayFire Array をロードする
ファイルから ArrayFire 配列をロードする方法を見つける必要があります。ファイルの形式はix iy iz valで、( ix, iy , iz) は値 val が必要な座標です。C++ の方法で (getline などを使用して) ファイルを開き、行を解析して、インデックスix、iy、izおよび値valを正しく取得します。
ファイルの反復処理を開始する前に、いつものように配列を作成します
次に、反復するときに、次のような行を使用して値を保存します。
しかし、配列は情報を正しく保存しません。つまり、単純な三次元配列で同じことを行うと、正しい情報が保持されます。
ファイル内の情報は 1 と 0 で構成され、3D 空間を表します。1 は空気領域を表し、0 はソリッド マテリアルを表します。(球体を表現するためのある種の離散化、ポイント全体は、この配列を使用して他の配列(速度フィールドを保持)を乗算するため、固体の場合、速度はゼロ値になります)
私は他の方法を試し、データを 1D 配列に平坦化し、それを配列のコンストラクターに渡しましたが、最良の場合、1 つではなく 3 つの球を回復します (配列のサイズは : Lx = 300 、Ly=Lz です)。 =100 ) しかし、私はやりたいことをすることができません。ファイルに正しいデータが含まれていることは確かです。このファイルを他のコードから生成します(ファイルの形式を変更すると役立つ場合は、変更できます)
読んでくれてありがとう。
編集:
データを保存するには、これを使用します:
3D 配列グリッドには、ポイント (1 と 0) が含まれており、正しいデータがあることがわかっています。
そしてファイルをロードするには:
オブジェクト配列は古典的な c++ 3D 配列 (次元 Lx, Ly , Lz ) であり、データがこの配列 ( object ) に正しく保存されているが ArrayFire オブジェクトには保存されていない場合....理由はわかりません。
編集2:
1D メモリのポインターを使用して、これを試します。
3D object[][][] 配列が正しい情報を持っていることを知っている!
しかし、配列が球を表す前に言ったように、ArrayFireオブジェクトaf_objはそうではありません。最良の場合、ArrayFireオブジェクトは3つの球を示します(理由はわかりません)。ネストされた fors の順序が重要です。xyz の考えられるすべての組み合わせを試してみましたが、何も機能しないようです。
opencl - ArrayFire に LAPACK がありませんが、あります
ArrayFire (3.3.1)の最新リリースをダウンロードし、ビルドしようとしています。私は立ち往生してcmake .
います。不足しているライブラリを多数インストールして再実行したところ、次のようになりました。
と
lapack をインストールしました。これは /usr/lib/liblapack.so にあります (これは代替のシンボリック リンクですが、壊れていません)。ラパッケも装着。
c++ - 条件付きのArrayfireエラー
ArrayFire で配列を飽和させようとしています。0.75 より大きい値はすべて 1.0 に飽和し、0.25 より小さい値はすべて 0.0 に飽和します。以下の表現を使用しています。
これは af::array タイプです。しばらくは機能しますが、0.75 を超える値がない配列を取得するとすぐに、次の例外が発生します。
呼び出すaf::print("", a > 0.75);
と、クラッシュする直前に次の出力が得られます。
この配列がすべてゼロであることをどういうわけか見て (0.75 より大きいので、そうあるべきです)、次元がゼロであると言っていますか? それは私が間違っていることですか、それとも彼らのコードのバグですか?
次のコードはそれを修正しているようですが、この解決策はやや非効率的だと思います。
関数全体を見たい人のために、私はニューラル ネットワークで適切な勾配を実行しています。a は実際には af::array 型の配列です。質問を簡単にするために、それを省略しました。