确定CUDA中#pragma展开N的最佳值

暴风雪

我了解其#pragma unroll工作原理,但是如果有以下示例:

__global__ void
test_kernel( const float* B, const float* C, float* A_out)
{
  int j = threadIdx.x + blockIdx.x * blockDim.x;
  if (j < array_size) {
     #pragma unroll
     for (int i = 0; i < LIMIT; i++) {
       A_out[i] = B[i] + C[i];
     }
  }
}

我想为LIMIT上面的内核确定最佳值,该内核将以x线程y数和块数启动LIMIT可从任何地方21<<20由于100万对于变量来说似乎是一个很大的数字(展开的100万个循环将导致寄存器压力,并且我不确定编译器是否会进行展开),那么“公平”的数字是多少(如果有)?以及如何确定该限制?

看守人

您的示例内核是完全串行的,无论如何在现实世界中都不是循环展开的有用用例,但让我们将自己限制在编译器将执行多少次循环展开的问题上。

这是内核的可编译版本,带有一些模板修饰:

template<int LIMIT>
__global__ void
test_kernel( const float* B, const float* C, float* A_out, int array_size)
{
  int j = threadIdx.x + blockIdx.x * blockDim.x;
  if (j < array_size) {
     #pragma unroll
     for (int i = 0; i < LIMIT; i++) {
       A_out[i] = B[i] + C[i];
     }
  }
}

template __global__ void test_kernel<4>(const float*, const float*, float*, int);
template __global__ void test_kernel<64>(const float*, const float*, float*, int);
template __global__ void test_kernel<256>(const float*, const float*, float*, int);
template __global__ void test_kernel<1024>(const float*, const float*, float*, int);
template __global__ void test_kernel<4096>(const float*, const float*, float*, int);
template __global__ void test_kernel<8192>(const float*, const float*, float*, int);

您可以将其编译为PTX,然后亲自查看(至少使用CUDA 7版本编译器和默认的计算能力2.0目标体系结构),最多可LIMIT=4096部署多达10个内核LIMIT=8192案件尚未解开。如果您有更多的耐心,可以尝试使用此模板为该代码找到确切的编译器限制,尽管我怀疑这样做特别有启发性。

您还可以通过编译器自己查看所有严重展开的版本都使用相同数量的寄存器(由于内核的琐碎性质)。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在FourierSeries中优化“ k”的最佳值

来自分类Dev

Kotlin:具有最佳值的maxBy {}

来自分类Dev

什么是Phusion旅客PassengerMaxRequestQueueSize的最佳值

来自分类Dev

keras 提取最佳值损失

来自分类Dev

为什么python的timeit使用“ 3中的最佳值”来测量经过的时间?

来自分类Dev

LinearSVC中参数class_weight的最佳值是多少?

来自分类Dev

从数据框列表中获取具有最佳值的数据框

来自分类Dev

如何为我的应用程序找到要在 setValidateAfterInactivity 中设置的最佳值

来自分类Dev

返回两个SQL表的最佳值以及表2中不匹配的表1中的值

来自分类Dev

将?x样式模式变量转换为最佳值

来自分类Dev

如何设置伽玛校正的最佳值

来自分类Dev

将?x样式模式变量转换为最佳值

来自分类Dev

使用Apply找到7个常数的最佳值?

来自分类Dev

哪种交叉方法最适合使我们快速改变GA中TSP的最佳值?

来自分类Dev

在大多数情况下,套索简历或山脊简历中的ALPHA是否存在最佳值?

来自分类Dev

如何为块大小选择最佳值,为坏块选择最佳的块数?

来自分类Dev

有没有一种方法可以比较列表中的两个对象并组合它们的最佳值?(Java)

来自分类Dev

K 中 K 的最佳值应该是多少意味着要在任何数据集上实现它的聚类?

来自分类Dev

SQL-以最佳值联接,否则以默认值联接

来自分类Dev

SQL-以最佳值联接,否则以默认值联接

来自分类Dev

查找列表字典的最佳值组合(也许与熊猫配合使用)

来自分类Dev

set.seed()函数-设置种子的最佳值是什么?

来自分类Dev

每小时MySQL最大连接数最佳值

来自分类Dev

为什么 AdamOptimizer 无法找到最小化 x*x 的最佳值?

来自分类Dev

CUDA中的经线展开期间的线程同步

来自分类Dev

CUDA循环在数组添加中展开

来自分类Dev

伪算法,需要4个输入并输出三个数字的最大/最佳值之和

来自分类Dev

确定设置哪些数据值的最佳方法

来自分类Dev

根据确定的值向左选择矩阵中的n个元素

Related 相关文章

  1. 1

    如何在FourierSeries中优化“ k”的最佳值

  2. 2

    Kotlin:具有最佳值的maxBy {}

  3. 3

    什么是Phusion旅客PassengerMaxRequestQueueSize的最佳值

  4. 4

    keras 提取最佳值损失

  5. 5

    为什么python的timeit使用“ 3中的最佳值”来测量经过的时间?

  6. 6

    LinearSVC中参数class_weight的最佳值是多少?

  7. 7

    从数据框列表中获取具有最佳值的数据框

  8. 8

    如何为我的应用程序找到要在 setValidateAfterInactivity 中设置的最佳值

  9. 9

    返回两个SQL表的最佳值以及表2中不匹配的表1中的值

  10. 10

    将?x样式模式变量转换为最佳值

  11. 11

    如何设置伽玛校正的最佳值

  12. 12

    将?x样式模式变量转换为最佳值

  13. 13

    使用Apply找到7个常数的最佳值?

  14. 14

    哪种交叉方法最适合使我们快速改变GA中TSP的最佳值?

  15. 15

    在大多数情况下,套索简历或山脊简历中的ALPHA是否存在最佳值?

  16. 16

    如何为块大小选择最佳值,为坏块选择最佳的块数?

  17. 17

    有没有一种方法可以比较列表中的两个对象并组合它们的最佳值?(Java)

  18. 18

    K 中 K 的最佳值应该是多少意味着要在任何数据集上实现它的聚类?

  19. 19

    SQL-以最佳值联接,否则以默认值联接

  20. 20

    SQL-以最佳值联接,否则以默认值联接

  21. 21

    查找列表字典的最佳值组合(也许与熊猫配合使用)

  22. 22

    set.seed()函数-设置种子的最佳值是什么?

  23. 23

    每小时MySQL最大连接数最佳值

  24. 24

    为什么 AdamOptimizer 无法找到最小化 x*x 的最佳值?

  25. 25

    CUDA中的经线展开期间的线程同步

  26. 26

    CUDA循环在数组添加中展开

  27. 27

    伪算法,需要4个输入并输出三个数字的最大/最佳值之和

  28. 28

    确定设置哪些数据值的最佳方法

  29. 29

    根据确定的值向左选择矩阵中的n个元素

热门标签

归档