0

コンパイラーがGPUポインターとCPUポインターを区別し、2つを混合するというばかげて一般的なバグを排除できるように、言語設計者がポインターをより強く型付けしない理由はありますか?

GPUメモリの場所とCPUメモリの場所の両方を一度に参照するポインタが必要になることはありますか(それも可能ですか)

それとも、これは言語の設計における非常に明白な見落としですか?


[編集]例:C ++ / CLIには2種類のポインターがあり、これらを混在させることはできません。彼らは、この要件をコンパイラーが実施できるように、別個の表記法を導入しました。

int* a; //Normal pointer
int^ b; //Managed pointer
//pretend a is assigned here
b = a;  //Compiler error!

CUDAが同じことをしない理由(怠惰/監視以外)はありますか?

4

2 に答える 2

4

Nvidia のnvccCUDA C "コンパイラ" は完全なコンパイラではなく、他のツール (cudafeおよび C プリプロセッサ) を呼び出してホスト コードとデバイス コードを分離し、それぞれのコンパイラに供給するかなり単純なドライバー プログラムです。

デバイス コード コンパイラ ( cicc、またはnvopencc以前の CUDA リリース) のみが Nvidia によって提供されます。コードのホスト部分はホストのネイティブ C コンパイラに渡されるだけで、Nvidia は競合するコンパイラ自体を提供する負担から解放されます。

ポインターの不適切な使用に関するエラー メッセージを生成するには、ホスト C コードを解析する必要があります。それは確かに可能ですが (たとえば、CUDA の特殊性について教えsparseたりclang)、私の知る限り、これまで誰も努力を払っていません。

Nvidia は、NVIDIA CUDA Compiler Driver NVCC に関するドキュメントを作成しました。このドキュメントでは、コンパイル プロセスと関連するツールについて詳しく説明しています。

于 2013-02-22T22:30:32.377 に答える