私は、次のCUDA機能書きたい:ホスト側でアドレスが共有メモリにあるかどうかを確認できますか?
void foo(int* a, size_t n)
{
if (/* MAGIC 1 */) {
// a is known to be in shared memory,
// so use it directly
}
else {
// make a copy of a in shared memory
// and use the copy
}
}
を、私たちは、ポインタは、デバイスのメモリにあるかかどうかを私たちに伝えることができた、cudaPointerGetAttributesの形でやや関連の施設を持っていますホストメモリ。おそらく、デバイスコード内のポインタを区別する方法もありますし、グローバルポインタからの共有を識別することもできます。あるいは、おそらくそれを行うためのコンパイル時のメカニズムがあるかもしれません。なぜなら、デバイスの機能はカーネルにコンパイルされ、自立していないからです。したがって、nvcc
は共有メモリで使用されているかどうか、ない。
偉大な:-)私は最初に追加のWin64固有のブードーが必要な理由を説明できますか?また、PTXガイドには、「一般的な」メモリアドレスと、おそらくスペース固有のアドレスがあると言われています。それはあなたの答えにどのように影響しますか? – einpoklum
誰かが32ビットモードでコンパイルしようとする場合に備えて、 "voodoo"を追加しました。あなたのコードが常に64ビットであることを知っていれば、ポインタのための '' l ''制約を直接使うことができます。 – tera
...あなたの答えにそれを編集しました。 – einpoklum