Cuda 可以为同一网格中的不同块声明不同的共享内存吗?

Cuda 可以为同一网格中的不同块声明不同的共享内存吗?,cuda,gpgpu,gpu,Cuda,Gpgpu,Gpu,我已经问过这个问题,但没有得到满意的答案。也许是因为我在其中包括了多个问题。 我的问题是,是否允许我为同一网格的不同块声明不同的共享内存 例如: 上面的代码是内核代码的一部分。我试图将特定数量的共享内存分配给特定的块。CUDA允许这种行为吗 现在目标已经停止摇摆,有一个具体而稳定的问题需要回答: 是的,这是完全可能做到的,但请注意 每个静态定义的共享内存变量在内核中的作用域都受到限制,这将使代码结构比需要的复杂得多 编译器将为您在共享内存中定义的每个变量发出单独的静态共享内存保留。如您所说,如果

我已经问过这个问题,但没有得到满意的答案。也许是因为我在其中包括了多个问题。 我的问题是,是否允许我为同一网格的不同块声明不同的共享内存

例如:


上面的代码是内核代码的一部分。我试图将特定数量的共享内存分配给特定的块。CUDA允许这种行为吗

现在目标已经停止摇摆,有一个具体而稳定的问题需要回答:

是的,这是完全可能做到的,但请注意

  • 每个静态定义的共享内存变量在内核中的作用域都受到限制,这将使代码结构比需要的复杂得多
  • 编译器将为您在共享内存中定义的每个变量发出单独的静态共享内存保留。如您所说,如果内核有9个条件定义的局部作用域共享内存分配,那么内核将使用静态保留进行编译,这是所有9个变量静态定义大小的总和
  • 第2点意味着,即使您有不同的条件声明共享内存分配,每个块的共享内存量也是相同的

  • 第二点和第三点意味着,您提出的计划不会带来规模效率收益。事实上恰恰相反。您的内核将需要更多的共享内存,而不仅仅是一个静态声明的共享内存,这是每种情况下所需的最大内存,并且您进行了相应的编码。

    现在目标已经停止摇摆,有一个具体、稳定的问题需要回答:

    是的,这是完全可能做到的,但请注意

  • 每个静态定义的共享内存变量在内核中的作用域都受到限制,这将使代码结构比需要的复杂得多
  • 编译器将为您在共享内存中定义的每个变量发出单独的静态共享内存保留。如您所说,如果内核有9个条件定义的局部作用域共享内存分配,那么内核将使用静态保留进行编译,这是所有9个变量静态定义大小的总和
  • 第2点意味着,即使您有不同的条件声明共享内存分配,每个块的共享内存量也是相同的

  • 第二点和第三点意味着,您提出的计划不会带来规模效率收益。事实上恰恰相反。您的内核将需要更多的共享内存,而不仅仅是一个静态声明的共享内存,这是每种情况下所需的最大内存,并且您进行了相应的编码。

    现在目标已经停止摇摆,有一个具体、稳定的问题需要回答:

    是的,这是完全可能做到的,但请注意

  • 每个静态定义的共享内存变量在内核中的作用域都受到限制,这将使代码结构比需要的复杂得多
  • 编译器将为您在共享内存中定义的每个变量发出单独的静态共享内存保留。如您所说,如果内核有9个条件定义的局部作用域共享内存分配,那么内核将使用静态保留进行编译,这是所有9个变量静态定义大小的总和
  • 第2点意味着,即使您有不同的条件声明共享内存分配,每个块的共享内存量也是相同的

  • 第二点和第三点意味着,您提出的计划不会带来规模效率收益。事实上恰恰相反。您的内核将需要更多的共享内存,而不仅仅是一个静态声明的共享内存,这是每种情况下所需的最大内存,并且您进行了相应的编码。

    现在目标已经停止摇摆,有一个具体、稳定的问题需要回答:

    是的,这是完全可能做到的,但请注意

  • 每个静态定义的共享内存变量在内核中的作用域都受到限制,这将使代码结构比需要的复杂得多
  • 编译器将为您在共享内存中定义的每个变量发出单独的静态共享内存保留。如您所说,如果内核有9个条件定义的局部作用域共享内存分配,那么内核将使用静态保留进行编译,这是所有9个变量静态定义大小的总和
  • 第2点意味着,即使您有不同的条件声明共享内存分配,每个块的共享内存量也是相同的

  • 第二点和第三点意味着,您提出的计划不会带来规模效率收益。事实上恰恰相反。您的内核将需要更多的共享内存,而不是只有一个静态声明的共享内存,这是每种情况下所需的最大内存,并且您进行了相应的编码。

    为什么说您没有收到答案?您正试图以运行时已知的大小静态分配共享内存。这一点在您上一篇文章的评论中已经指出。我认为您的问题的答案是否定的。要以您尝试的方式更改共享内存的大小,您应该能够在运行时区分块ID。不,是的。但是现在您已经编辑了它…发布一个代码与前一篇文章完全相同的问题,并收到相应的评论,编辑文章并声称前一篇评论是错误的,这有点虚伪。@sandeep.ganage:您是否查看了编译器为该内核静态保留的共享内存量?你有没有注意到这是所有九个静态分配的总和?为什么你说你没有收到答案?
    Dx = blockDim.x;
    Dy = blockDim.y;
    Bx = BlockIdx.x;
    By = BlockIdx.y;
    
    if(By==0)
     {
      if (Bx==0)
      {
       __shared__ bds[5][5];
      }
      else if (Bx==(Dy-1))
      {
       __shared__ bds[6][6];
      }
      else
      {
       __shared__ bds[5][6];
      }
    }