答えて
グローバル関数は、「カーネル」とも呼ばれます。これは、CUDAカーネル呼び出しのセマンティクス(<<<...>>>
)を使用してホスト側から呼び出すことができる関数です。
デバイス機能は、他のデバイス機能またはグローバル機能からのみ呼び出すことができます。 __device__
関数をホストコードから呼び出すことはできません。
__global__
は、クーダカーネル用で、ホストから直接呼び出し可能な関数です。 __device__
関数は、__global__
および__device__
関数から呼び出すことはできますが、ホストから呼び出すことはできません。 __device__
と__global__
機能間
違いは次のとおり
__device__
機能は、デバイスから呼び出すことができ、それは唯一のデバイスで実行されます。
__global__
機能はホストから呼び出すことができ、デバイス内で実行されます。
したがって、カーネルの関数から__device__
関数を呼び出すため、カーネル設定を行う必要はありません。 void foo(void)
と__device__ foo (void)
を宣言するなど、関数を「オーバーロード」することもできます.1つはホスト上で実行され、ホスト関数からのみ呼び出すことができます。もう一方はデバイス上で実行され、デバイスまたはカーネル機能からのみ呼び出すことができます。
また、次のリンクにアクセスすることもできます。http://code.google.com/p/stanford-cs193g-sp2010/wiki/TutorialDeviceFunctions、それは私にとって役に立ちました。
私は一例でそれを説明します:
main()
{
// Your main function. Executed by CPU
}
__global__ void calledFromCpuForGPU(...)
{
//This function is called by CPU and suppose to be executed on GPU
}
__device__ void calledFromGPUforGPU(...)
{
// This function is called by GPU and suppose to be executed on GPU
}
を、すなわち、我々は(GPU)機能デバイスを呼び出すためのホスト(CPU)機能をしたいときは、「グローバル」は使用されています。この読み:「https://code.google.com/p/stanford-cs193g-sp2010/wiki/TutorialGlobalFunctions」
をそして、我々は、デバイス(GPU)関数(というカーネルが)私たちは「デバイス」を使用し、別のカーネル関数を呼び出したいとき。この "https://code.google.com/p/stanford-cs193g-sp2010/wiki/TutorialDeviceFunctions"
これは違いを理解するのに十分であるはずです。
__global__
機能はカーネルの定義です。 CPUから呼び出されるたびに、そのカーネルがGPU上で起動されます。
しかし、そのカーネルを実行している各スレッドは、2つの整数のスワッピングなど、何度か何度も何度もコードを実行する必要があります。したがって、ここではCプログラムと同様にヘルパー関数を書くことができます。また、GPU上で実行されるスレッドの場合、ヘルパー関数は__device__
と宣言する必要があります。
したがって、デバイス関数はカーネルのスレッドから呼び出されます.1つのスレッドに対して1つのインスタンスが呼び出されます。一方、グローバル関数はCPUスレッドから呼び出されます。私は(私はいくつかの信頼できるソースに遭遇したときに、私は、後でこれらを実証します)当分の間、ここにいくつかの根拠のない憶測を記録しています
...
__device__
機能が無効以外の戻り値の型を持つことができますが、__global__
関数は常にvoidを返す必要があります。__global__
機能が__device__
関数は呼び出し元のカーネルと同じスレッドで実行しながら、(CUDAダイナミック並列処理モデル(別名CNP)の一部として)追加のGPUスレッドを起動するために、GPU上で実行されている他のカーネル内から呼び出すことができます。
グローバル関数のみをホストから呼び出すことができ、デバイスの機能のみ
を設定するカーネルを必要とするので、dosen't他のデバイスの機能のカーネル関数から呼び出すことができますが、彼らは戻り値の型を持っていません__golbal__
関数と言うCUDA Cキーワード(宣言指定子)であり、
- は、デバイス上でホスト(CPU)コードから(GPU)
- コールを実行します。 < < < no_of_blocks、no_of threads_per_block >>>を使用してホスト・コードによって起動
グローバル関数(カーネル)。 各スレッドは、固有のスレッドIDによってカーネルを実行します。 CPUから呼び出されたGPU上で動作し、 - あなたはそれが__host__
__device__
__global__
の両方を使用する実行する必要がありcode.ifしかし
__device__
機能は、ホストから呼び出すことはできません。<<<dim3>>>
引数で実行されます。__device__
- GPUから実行され、GPUで実行されます。バリバリにも使用できます。__host__
- CPUから実行され、CPUから呼び出されます。
この回答はちょっと遅すぎます。質問が尋ねられた時点では正しいですが、[動的並列処理](https://devblogs.nvidia.com/parallelforall/introduction-cuda)が発明されて以来、これはもう正しくありません-dynamic-parallelism /)。 – tera
- 1. ショー機能とリスト機能の違い
- 2. テーブル機能とパイプライン機能の違い?
- 3. グローバル機能MVC3の相違点
- 4. グローバル機能
- 5. グローバル機能
- 6. webformsとグローバル機能のアドバイス
- 7. シエスタのグローバル機能
- 8. デバイス機能ポインタ
- 9. 持ち上げ機能と高次機能の違い
- 10. フロア機能とトランケート機能の違いは何ですか?
- 11. 「機能」と「機能」の違いは何ですか? VIMで?
- 12. Makefileの$()と$ {}の機能と違い
- 13. WebJobのグローバル機能タイムアウト
- 14. クリック機能のjQuery(グローバル)
- 15. フェニックスレンダリング機能の違い
- 16. テンプレート機能の違い
- 17. GHCiとrunHaskellのgetLine機能の違い
- 18. fmapとbindの機能の違いは?
- 19. シングルトンまたはグローバル機能?
- 20. GPSデバイスとサーバとの通信機能
- 21. ポストリンクとリンク機能の違い
- 22. NuGetパッケージと拡張機能の違い
- 23. 機能テストとシステムテストの違いは?
- 24. クロージャ機能とファンクションの違い
- 25. ハードウェアの機能とデバイス今まで
- 26. jQueryグローバル変数が機能しない
- 27. グローバル変数が機能しない
- 28. javascript - グローバル変数が機能しない
- 29. グローバル変数が機能しない
- 30. 機能(x:Tarray <String>)と機能(x:文字列の配列)の違い
動的並列処理を使用している場合は、CUDAカーネルのセマンティクス(<<<...> >>)を使用するデバイスから、__global__関数を呼び出すこともできます。これにはCUDA 5.0と計算機能3.5以上が必要です。 – Tom