問題タブ [cuda]
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 の例
速度が大幅に (50 倍から 1000 倍に) 向上する可能性があるアプリケーションの種類を示す、OpenCL の入門的な例を探しています。 Cudaにはすばらしい例がたくさんありますが、OpenCL で同じものは見つかりませんでした。
良い例は、粒子群、シミュレートされたアニーリング、進化的アルゴリズム、アリコロニーの最適化などによる複雑な機能のグローバルな最適化かもしれません.
.net - .NETでのCUDAグローバルメモリ割り当て解除の問題
CUDAメモリ構造の.NETラッパーとして機能するクラス(以下の例を参照)
があり
、cudaMalloc()を使用して割り当てられ、IntPtrタイプのメンバーフィールドを使用して参照されます。
(クラスは、さまざまなCUDA機能をラップするネイティブC DLLのDllImportを使用します。)
disposeメソッドは、ポインターがIntPtr.Zeroであるかどうかを確認し、そうでない場合は
、メモリの割り当てを正常に解除して(CUDAの成功を返す)cudaFree()を
呼び出します。 IntPtr.Zero。
finalizeメソッドはdisposeメソッドを呼び出します。
問題は、disposeが以前に呼び出されていない状態でfinalizeメソッドが呼び出された
場合、cudaFree()関数が「無効なデバイスポインタ」のエラーコードを設定することです。
チェックしたところ、cudaFree()が受け取るアドレスは、cudaMalloc()によって返されたアドレスと同じであり、dispose()は以前に呼び出されていません。
dispose()への明示的な呼び出しを追加すると、同じアドレスが正常に解放されます。
私が見つけた唯一の回避策は、ファイナライザーからdisposeメソッドを呼び出さないことでしたが、dispose()が常に呼び出されるとは限らない場合、これによりメモリリークが発生する可能性があります。
なぜこれが起こるのか考えはありますか?-WindowsVista64ビット+GeForce8800およびWindowsXP32ビット+QuadroFXの.NET3.5SP1で、CUDA 2.2および2.3で同じ問題が発生しました(どちらの番号かはわかりません)。
c++ - ポインターから配列インデックスを計算する
私と何人かの仲間がゲーム (Rigs ofRods) に取り組んでおり、物理計算のために OpenCL を統合しようとしています。同時に、データ構造の非常に必要なクリーンアップを実行しようとしています。私たちはデータ構造をクリーンアップし、OpenCL の要件に注意を払っていると言うべきだと思います。
オープン CL を使用する際の問題の 1 つは、メモリ空間が異なるためポインターを使用できないことです。OpenCLについて私が知っていることはほとんどありませんが、すべてのデータをGPUにコピーしてから計算を実行すると、ポインター値がコピーされますが、アドレスは予想されるアドレスに対応しません。
問題のデータは配列に集中されます。オブジェクトがそのデータを必要とする場合、必要なオブジェクトへのポインターを使用するか、配列インデックスを格納します。
OpenCL を説明する 1 つの解決策は、ポインターの代わりに配列インデックスを使用することです。これはハードカップリングにつながり、後で頭痛の種になる可能性があります。解決策として、開始アドレスと現在のアドレスに基づいて配列インデックスを計算するという考えがありました。もちろん、これは連続配列でのみ機能します。
これをテストするためにサンプル アプリを作成しましたが、問題なく動作し、別のプラットフォームでも検証された人もいます。
これは骨の折れる解決策というよりも、クラッジのようなものではないかと心配しています。これが非連続メモリでは機能しないことは承知しています。
基本的に私の質問は次のとおり
です。既知の連続メモリでこのアプローチを使用する場合の落とし穴は何ですか?
それが連続的であるとどのように判断できますか?
この種の問題に対処するとき、人々はどのようなアプローチをとってきましたか?
ありがとうございます。フォーマットがずれている場合はお詫び申し上げます。質問を投稿するのはこれが初めてです。
c++ - cudaSafeCall() ランタイム API エラー
Visual Studio 2008 でエミュレーション モードで CUDA を実行しようとしています。
実行時にこの問題を示しています:
たとえば、あるケースでは、次のようになりました。
そして、これをコメントアウトした場合:
これは、エミュレーション モードでコードを実行しているためですか? 他の提案はありますか?
concurrency - 並列プログラミングを始める
したがって、マルチコアのように見え、それに関連するすべての複雑さがそのまま残ります。私は、並列処理から確実に恩恵を受けるソフトウェア プロジェクトを計画しています。問題は、並行ソフトウェアを書いた経験がほとんどないことです。私は大学でそれを学び、概念と理論を非常によく理解していますが、学校以来、複数のプロセッサで実行するソフトウェアを構築するのに役立つ経験はありません。
私の質問は、マルチプロセッサ プログラミングを始めるための最良の方法は何ですか? Windows の経験はほとんどなく、Mac OS X での C/C++ および Obj-C による Linux 開発に精通しています。また、私が計画しているソフトウェア プロジェクトでは、FFT と、多くのデータの浮動小数点比較が必要になるでしょう。
OpenCL、OpenMP、MPI、POSIX スレッドなどがあります。どのテクノロジから始めるべきですか?
以下に、私が検討しているいくつかのスタック オプションを示しますが、それらが私の目標に向けて実験できるかどうかはわかりません。
- Snow Leopard を入手して、ラップトップの ATI X1600 GPU で OpenCL Obj-C プログラムを実行できるようにする必要がありますか? また
- プレイステーションを手に入れて、利用可能な 6 つの Cell SPE コアを処理する C コードを書いてみるべきでしょうか? また
- Nvidia カードを搭載した Linux ボックスを構築し、CUDA で作業してみるべきですか?
よろしくお願いします。
debugging - CUDAPP 1.1 cudppSort構成エラー(無効な構成引数)
cudppSortを呼び出して、キー/値のセットを並べ替えようとしています。次のコードを使用して、並べ替えアルゴリズムを設定しています。
プログラムは終了しますが、次の行にあります。
そしてstdoutに出力します:
scan_app.cuの行を確認しました。です、
したがって、明らかに私の構成には、allocScanStorageが爆破する原因となるエラーがあります。関数内のCUDA_SAFE_CALLへの呼び出しは2つだけであり、どちらかが構成と関係がある理由はわかりません。
私の構成の何が問題になっていますか?
.net - VS2008、エミュレーションモードで.NETコードから呼び出されたCUDAカーネルのデバッグ
CUDAには、エミュレーションモードでコードをコンパイルするオプションがあります。これは、提供される.rulesファイルでサポートされています。
DllImportを使用してネイティブdllを呼び出すC#.NET 3.5 SP1コードがあります。ネイティブdllはnvccを使用してVS2008経由でコンパイルされ、その機能はCUDAとの間でメモリを転送し、CUDAカーネルを呼び出すことです。
CUDAカーネルが正しい場合、すべてが正常に実行されますが、バグがある場合は、カーネルのタイトルまでコードにステップインして、カーネルが受け取るパラメーターを確認することしかできません。(startup-projectのデバッグオプションでネイティブコードのデバッグを有効にしました。)
エミュレーションモードでコンパイルしようとしましたが、CUDA memcopy host-> deviceを呼び出すと、CUDAエラー「mixeddeviceexecution」が発生します。alloc + dealloc + memcopyを同等の非CUDAバージョンに切り替えてみましたが、カーネルを呼び出すときに同じエラーが発生します。
デバッグエミュレーションモードを使用しようとしたときに何を間違えましたか?
PS私はこれをVistax64SP1 + VS2008で試しましたが、同じソリューションがx86とx64の両方に準拠しており、どちらもエミュレーションモードでは機能せず、どちらも非エミュレーションモードで機能しました。
matrix - CUBLASまたはサポートされているライブラリ、および初心者向けの読書に重点を置いています
GPU(nVidia Quadro NVS140M)の能力を利用して、プロジェクトのマトリックス計算を高速化しようとしています。いくつかのドキュメント(プログラミングガイド、ベストプラクティスガイド、リファレンスマニュアル)を読んでいますが、どのセクションに焦点を当てるべきかわかりません。これについてアドバイスをいただければ幸いです。
また、CuBLAS.netなどのサードパーティが保守しているSDKがあるかどうか疑問に思っています。これにより、プロジェクトで目標を達成するのに役立つ提供されているcublasの機能に固執する前に、cublas開発プロセスが簡素化される可能性があります。繰り返しになりますが、コメントを事前に感謝します。
visual-studio - 既存の MFC プロジェクトで CUDA を使用する
CPU 最適化 BLAS ライブラリを使用した行列計算を行う既存の MFC アプリケーションがあります。自分のプロジェクトに CuBLAS 計算機能を追加することに興味がありますが、次の 2 つの質問があります。
1) この時点で、独自の CUDA カーネル、スレッド、およびブロック構成を指定するために何かをする必要があるかどうかはわかりません。もしそうなら、アルゴリズムを変更する際に、アーキテクチャのどのセクションに最も注意を払うことをお勧めしますか?
2) (a) プログラム内の CuBLAS 機能を使用して Visual Studio で新しいプロジェクトを作成するか、(b) CuBLAS 機能を既存の MFC プロジェクトに統合することに関心があります。ただし、Visual Studio プロジェクトを CUDA SDK で適切に動作するように構成するには、このようなガイドに従う以外に問題があります。これを既存のプロジェクトと統合しようとすると、うまくいかない可能性があります。これに関するあなたの推奨事項は何ですか?
コメントありがとうございます。
visual-studio - Visual Studio、Intel Visual Fortran、および Visual C/C++ 混合言語コンパイル
Windows 7 x64 で、Intel Fortran コンパイラ v11 を使用して Visual Studio 2008 Pro を操作します。
すべての Fortran ソース ファイルを使用してインテル® Visual Fortran プロジェクトをセットアップしました。これらすべてのサブルーチンを徐々に C/C++ (実際には cuda -- ボーナス ポイント) に置き換えたいと考えています。ソリューション エクスプローラーでソース ファイルを右クリックして [既存の項目を追加] すると、リストに .cpp または .c または cuda ファイルが表示されますが、コンパイルされることはありません。したがって、Fortran コードに記述された INTERFACE to C コードは、常にリンク ステップで失敗します。
このような言語が混在するプロジェクトをどのように手に入れるのでしょうか? Google は私を失望させました。私が見つけたのは実際のインターフェイス コードの説明だけで、ビジュアル スタジオ ビルド システムの実装方法についての説明はありませんでした。
前もって感謝します。