2011-09-08 9 views
13

ソースファイルの代わりにバイナリファイルを使用する方法があるので、私はこれを尋ねています。CUDAのアセンブリ言語はありますか?

また、アセンブリ言語では、関数ポインタをシミュレートする方が簡単だと思います。 GPU上のアセンブリとCPU上のアセンブリが全く異なる場合を除きます。

+0

CUDAのCには何が問題なのですか? http://developer.download.nvidia.com/compute/cuda/2_1/toolkit/docs/NVIDIA_CUDA_Programming_Guide_2.1.pdf –

+4

[「CUDAコードに命令を入れることは可能ですか?」という回答に数週間前に回答しました。 ](http://stackoverflow.com/questions/3677220/is-it-possible-to-put-instructions-into-cuda-code/7072079#7072079)。 *注:*受け入れられた答えではなく、後で来たもの。 – dmckee

+0

@dmckee +1。また、CUDA 3.2(および2.0デバイス)の関数ポインタはptxに干渉することなくサポートされているため、古いデバイスにはデバイスファンクションのようなものはありません。カーネルからの '__device__'関数へのすべての呼び出しはインライン展開されています。 – aland

答えて

29

PTXを見てみるとよいでしょう。 NVIDIAはそれをCUDA 4.0のドキュメントに記述したドキュメント。

http://developer.nvidia.com/nvidia-gpu-computing-documentation

NVIDIAは、AS PTXを記述する「TA低レベルの並列スレッド実行仮想マシンと命令セットアーキテクチャ(ISA)。PTXは、データパラレルコンピューティングデバイスとしてGPUを公開します。」 x86アセンブリとまったく同じではありませんが、読んで興味深いかもしれません。

+10

PTXは仮想命令セットであることを指摘する価値があります。それぞれの異なるNVIDIAアーキテクチャには、PTXがターゲットとする独自の物理ISAがあります。インラインx86 ammと同様にPTX命令をCUDAコードにインライン展開できます。 –

12

はい、GPU上のアセンブリはCPUのアセンブリとはまったく異なります。 違いの1つは、GPUの命令セットが標準化されていないことです。 NVidia(およびAMDおよび他のGPUベンダー)は、1つのGPUモデルから次のGPUモデルに命令セットを変更することができます。

CUDAはアセンブリ言語を公開していません。ポイントはありません。 (そして、CUDAのC言語の制限や、それがサポートしている他の言語の制限は、GPUハードウェアの制限のためにそこにあります.Nvidiaがあなたを嫌っていて迷惑をかけるだけでなく、基本的な命令セット

(NVidiaでは、コードに使用して埋め込むことができる「仮想」命令セットが定義されていますが、実際には実行できません。 命令セットではなく、ハードウェア命令に直接マップされません。アセンブリ言語のように見える単純なプログラミング言語です。

+1

oh!知っておきたいことは...たとえそのコードが別のGPUで動作することを期待できないとしても...間違ったアプローチです!おかげで – widgg

+0

あなたのCUDAコードは、異なるGPUでうまく動作します。 CUDAは、それを各GPUに適したターゲットにコンパイルするだけです。 – jalf

15

実際には2つの異なるCUDAアセンブリ言語があります。

PTXは、特定のGPUファミリで実行される実際のオペコードであるSASSにコンパイルされた機械に依存しないアセンブリ言語です。 .cubinsを構築すると、SASSを扱うことになります。ほとんどのCUDAランタイムアプリケーションでは、元のアプリケーションの後にリリースされたGPUで実行できるため、PTXを使用します。

sm_20(Fermi/GTX 400シリーズ)をターゲットにしている場合、関数ポインタはしばらくの間CUDAに入りました。

関連する問題