2016-06-24 3 views
0

ローカル(共有)メモリはスレッドブロック(CUDA)/ワークグループ(OpenCL)ごとに割り当てられ、同じスレッドブロック(CUDA)/ワークグループ(OpenCL)内のすべてのスレッド間で共有されます。ローカル(共有)メモリが実際にどのように割り当てられていますか?

実際にどのように割り当てられますか?ブロック/グループの最初のスレッドによって割り当てられるのか、またはメモリコントローラによってブロックが作成される前に割り当てられていますか?または、他の何か ? OpenCLのは、「ローカルメモリ」を考えて何

+1

@DarkZeros:そのコメントは、おそらく十分な答えです。もしそれを1つとして追加したいのなら、 – talonmies

+0

@DarkZerosありがとう、これはとても良いことです – OmarGW

答えて

1

です:のみカーネル実行中に利用可能

  • メモリは、それが唯一の同じワークグループの要素によって共有されています。各ワークグループはローカルメモリのみを見ることができます。
  • メモリ使用量はコンパイル時には既知であり、制限されています。

これは、CPU /マルチコアシステムのレジスタまたはL1/L2キャッシュに非常に似ています。コンパイラは、ターゲットCPUのレジスタを知り、それに応じて計画します。 スケジューラがワークグループをハードウェアリソースにスケジュールすると、ワークグループごとに十分なメモリが確保されます。

カーネル実行内のローカルメモリは、レジスタまたはプライベートメモリと同様に、すでに割り当てられているメモリへのポインタとして考えることができます。

関連する問題