問題タブ [amd-processor]
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 - glBindBuffer を呼び出すと、atio6axx.dll でアクセス違反が発生するのはなぜですか?
問題に至るまで:
C を使用して OpenGL について学び、自分でデザインした (おそらく簡単な) タイルベースのゲームを作成します。最初は、テスト用に 10 個ほどの三角形しか描いていませんでしたが、バッファ データとインデックスを次のように設定しました。
より多くの三角形を作成するにはさらに多くの三角形が必要になるため、自動化することにしました (また、シェーダーでいくつかのマトリックスを使用するつもりであるため、値は画面/ビューポート座標ではなくピクセル単位です)。
この新しいデータから正確に同じ三角形を取得できることを確認したかったので、インデックスを自動化していないことに注意してください。
問題:
特定のGL 呼び出しでアクセス違反が繰り返し発生します。ブレークポイント間を手動で移動すると、 に達すると常に失敗しますglBindBuffer(GL_ELEMENT_ARRAY_BUFFER, positionBufferObject);
。
この行に 1 つのブレークポイントがあり、この行の後に 1 つのブレークポイントがある場合、その間の行をスキップ (無視しますか? サイレントに失敗しますか?) しGLuint fShader = glCreateShader(GL_FRAGMENT_SHADER);
、呼び出し内に到達すると中断しmyProgram = CreateProgram();
ます (私の頂点シェーダーは直前に同一の呼び出しで正常に動作します)。
すべての glGetError() は 0 を返します。これは、仕様によると、問題がないか、glGetError に独自のエラーが発生したことを意味します。
ただし、どこで壊れても、呼び出しスタック pelles C は、壊れたときに 'atio6axx.dll; を示します。DrvPresentBuffers() +163B7B' で、常にここにあります。
最近、Radeon HD 6850 用の最新の Catalyst アップデートをインストールしました。GPU/頂点バッファ オブジェクトなどに関するメモリの制限については何も見つかりません。また、25KB までのデータが何かの多くを壊すとは思えません。これは OpenGL の問題ではなく、コードの実装方法に問題があるか、慣れていない制限/メモリの問題であると感じています。
このサイトのポスター #20にも同様の問題がありますが、コードではなくプログラムの障害に関連しているようです (10 月 11 日に投稿されたにもかかわらず、最新のドライバーが公開される前に発生したと思います)。GetBitmap()
glBindTexture やその他の呼び出しを問題なく使用できます。
これは最も明白なように思えますが、古いアルゴリズムから新しいアルゴリズムに変更したのは、データ作成の自動化だけです。const float *
ポインターは関係ありません。また、コンパイラーが必要であると警告さえしなかった にキャストすることさえあります。
単純な問題の解決策を探すのに間違った場所を探していませんか? コードを説明したり、必要に応じてさらに追加したりしますので、お尋ねください。手動で ~6400 以上の値を書き出すのは本当に避けたいと思います。
編集#1:他のいくつかのテストの後、古い実装でもこのエラーが発生するようです。私はしばらくそれをコンパイルしていなかったに違いありません (別のファイルであるシェーダーに取り組んでいました)。私はとても混乱しています。
編集#2:さらにコード。これは、InitGL の前に発生する唯一の関数であり、InitGl を呼び出す関数です。:
FnLdInit は、すべての拡張機能を接続する場所です。
GetBitmap() は次のとおりです。
編集 #3 : アンインストールされた Catalyst 12.10 および関連するすべてのドライバー。12.8を再インストールしました。同じ問題ですが、現在は GenBuffers で発生しています。奇数。
編集 #4 : プロジェクトを 32 ビットにしてコンパイルしてみました。まったく同じ問題が発生しますが、なんらかの理由で Pelles C が LIB にラベルを付けていないため (言及するたびに「無題」と表示されます)、AMD が提供する 32 ビット lib も失敗しているとしか思えません (atio6axx.dll/. lib がロードされていません)。この問題は、私のコードではなくドライバーに起因しているように見えるため、実際の解決策はないと感じています。このような関連する問題を検索して確認した後、実際にはクライアント側の解決策はないようです。
編集#5:この時点でプログラムがアクセス違反を発生させなかったため、以前は気付かなかった別の問題は、コードが到達glActiveTexture(GL_TEXTURE0);
して突然すべての行をスキップして関数を終了することです。この行を削除すると、次の行が実行されます。glActiveTexture(GL_TEXTURE0);
は from ですがatio6axx.dll
、それ以外のコマンドはすべて fromOPENGL32.dll
であるため、絞り込んだようです。奇妙なのは、この時点でアクセス違反がなく、奇妙なスキップがあることです。
これが起こった理由を誰も理解できないと思いますか?15\11\2012 (先週の木曜日) のバージョン atio6axx.dll を持つベータ版の Catalyst ドライバーもインストールしました。したがって、最新のドライバーは問題ではありません。Catalyst 12.4 (現在は 12.10 で、このプログラムは 12.8 で実行されました) 以降、すべてのドライバー バージョンを試しました。途方に暮れ、新しいプログラムでさえ同じ問題に遭遇します。
compiler-construction - コンパイラを使用してAMDOpenCLカーネルのループを展開する方法はありますか?
OpenCLforAMDとNvidiaGPUのパフォーマンスの違いを評価しようとしています。行列とベクトルの乗算を実行するカーネルがあります。現在、カーネルを2つの異なるシステムで実行しています。1つはUbuntu12.04とCUDA4.0(OpenCLライブラリとヘッダーを含む)を搭載したNVidia GT525mを搭載したラップトップで、もう1つはUbuntuを搭載したAMDRadeonHD7970を搭載したデスクトップです。 12.04および最新のCatalystドライバー。
カーネルには#pragma unroll
、Nvidia OpenCL実装の大幅な高速化(〜6x)を実現する2つのステートメントがあります。ただし、AMDOpenCLバージョンではスピードアップは発生しません。AMD APPカーネルアナライザーでカーネルを見ると、トリップカウントが不明なため、展開が使用されていないというエラーが表示されます。だから私の質問は、#pragma unroll
AMD OpenCLで動作するのか、それとも代替手段があるのか(おそらく私が知らないコンパイラフラグ)です。以下にカーネルを含めました
この同じカーネルは両方の実装で正しい結果を生成しますが、#pragma unrollコマンドはAMDに対して何もしません(コメントアウトしてチェックアウト)。
opencl - 多くのOpenCLSDK。それらのどれを選ぶべきですか?
Windows 7 OSを搭載したコンピューターには、このベンダーのOpenCLSDKの3つのバージョンがあります。
- インテル
- NVIDIA
- AMD。
それぞれを使用してアプリケーションを構築します。出力として、3つの異なるバイナリがあります。例:my_app_intel_x86、my_app_amd_x86、my_app_nvidia_x86
このバイナリはこれで異なります:
- likangeプロセスで異なるSDKを使用します
- 彼らは実行時に異なるOpenCLプラットフォーム名を見つけようとします
SDKを1つだけ使用して、実行時にプラットフォームを確認できますか?
cuda - NVidia の ISA 言語
AMD は、各 GPU ファミリの ISA を定義します。私が理解しているように、ISA は命令セット アーキテクチャ、つまりアセンブリのような「言語」です。NVidia の GPU の「アセンブリライク言語」とはどのように呼ばれていますか? - PTX? NVidia カーネル用にそのようなアセンブリを生成する AMD または Intel オフライン コンパイラのようなツールはありますか? ありがとう
opencl - ATI /AMDOpenCLのローカル変数の配置
構造のずれに悩まされてきました。関連する構造は次のとおりです。
ちなみに、STACK_DEPTHは4の倍数です。すべての構造体のサイズが16の倍数であり、内部のfloat4が整列した境界上にあることを確認するように注意しました。
問題は、ローカル変数として使用すると、構造体RayStackが整列されていないことです。
スタックアドレスは、16バイトで整列された構造の場合のように、0ではなく8で終わることになります。これにより、ATIカードがクラッシュします(ただし、IntelとnVidiaはそれに悩まされていません)。__attribute __((aligned(16)))を構造体(前後)とローカル変数定義に配置してみましたが、何も変わりません。実際、printfステートメントを追加すると問題が解決しましたが、方法はわかりません。
ローカル変数スタックが16バイト境界に配置されていることを確認し、ATIカードでのクラッシュを防ぐために離れていますか。
ありがとう!
opencl - プライベートからローカル、そしてグローバルへのOpenCL削減?
次のカーネルは音圧フィールドを計算します。各スレッドは、pressure
ベクトルの独自のプライベート インスタンスを計算し、グローバル メモリに合計する必要があります。pressure
ベクトルを計算するコードが正しいと確信していますが、これで期待どおりの結果が得られるようにするのにまだ問題があります。
データの次元に関するいくつかの注意事項: スレッドの総数は 100 から 2000 の間で変化しますが、場合によってはこの範囲外になることがあります。
groupSize
ハードウェアに依存しますが、現在、1(cpu) から 32(gpu) の間の値を使用しています。
HYD_DIM_TOTAL
コンパイル時に認識され、4 から 32 の間で変化します (通常は 2 の累乗になりますが、必ずしもそうではありません)。
このリダクション コードに明らかに間違っている点はありますか?
PS: AMD APP SDK 2.8 を搭載した i7 3930k と NVIDIA GTX580 でこれを実行しました。
c - AMDドライバーがフルスクリーンクワッドを正しくレンダリングしないのはなぜですか?
私のゲームエンジンでは、実際の画面に描画する前にフレームバッファーに描画し、その後、後処理シェーダーを使用して実際のフレームバッファーに描画します。ただし、AMDドライバーで発生している問題があり、クワッドが正しくレンダリングされません。
このコードは、複数のオペレーティングシステムのNvidiaとIntelGPUの両方で期待どおりに機能します。次に例を示します。http://i.stack.imgur.com/5fiJk.png これは、AMD GPUが異なる3つのシステムで再現されており、AMD以外のシステムでは見られません。
クワッドを作成したコードは次のとおりです。
2つの独立した三角形を使用するなど、他のオプションを試しましたが、これまでのところ何も機能していません。この動作がAMDドライバーで発生する理由について私は完全に迷っています。
opengl-es - AMD/ATI FirePro V5900 WebGl / OpenGl ES はサポートされていませんか?
現在 (2013 年 2 月 28 日) の AMD バージョンの Catalyst ドライバーでは、9.3.3 WebGl はサポートされていません。少なくとも、Firefox や Chrome をネイティブ GL サポートに接続することはできません。ANGLE が有効な場合にのみ機能します。それで、利用可能な有効なドライバーはありますか、それとも問題は何ですか?
さらに、10.8 以上の Catalyst バージョンのみが OpenGL ES をサポートしているようですが、リリース ノートによると FirePro はサポートされていません。
c++ - OpenCL:dllでclRetainDeviceが見つかりませんでした
プラットフォーム、GPUを取得し、4つのカーネルをコンパイルするOpenCLプログラムを実行するAMD C ++バインディングとSDK(最新のもの)を使用すると、起動時に上記のエラーが発生します。GPUが1.1までしかサポートしていない私のコンピューターでは正常に動作しますが、他のコンピューターでは上記のエラーが発生しているようです。これは、コンパイル(のように、いくつかのマクロを定義する必要があります)、ドライバー、C ++バインディング、または他の何かの欠如の問題ですか?自分のコードでclRetainDeviceを明示的に呼び出さない—それはどこかのバインディングの一部ですか?