首页 > 代码库 > cuda 寄存器数组使用解析

cuda 寄存器数组使用解析

关于cuda寄存器数组

 

       在基于cuda对一些算法做并行优化时,为了尽可能的提高算法的运行速度,有时我们会想要用寄存器数组使得算法飞一般的快,然而,效果却总是差强人意。用了竟然比没用快,这是为什么呢?

 

    哈哈,说重点,我们定义寄存器数组有以下两种方式:

 

1       Inta[8];

         此时,我们定义的数组真的是我们想要的寄存器数组吗?这样的定义,编译器将我们定义的“寄存器数组”放在了 local memory,而local memory 就是在显存中开辟的一块空间,速度怎么可能会快?

 

2       int a[8] = {0,0,0,0,0,0,0,0};

         定义时顺便初始化,此时是不是我们想要的寄存器数组呢?不一定,只能说有一定的概率是我们想要的寄存器数组。编译器会根据定义数组的大小确定是否将寄存器数组放入local memory。可是具体数组的size为多少会是我们想要的寄存器数组,不得而知!

 

那么,有没有方法强制使我们定义的寄存器数组保存在寄存器中呢?我表示,没查到。

好像只有定义多个变量。

例如:将        int a[8];             替换为如下形式:

                Int a0;

                Int a1;

                Int a2;

                Int a3;

                Int a4;

                Int a5;

                Int a6;

                Int a7;

只是这样的定义方法,程序的通用性会再降一个级别

 

    说了半天,好像净是废话,这样当然可以啦。好了,再强调一下,如果各位博友知道如何在cuda中如何定义我们想要的寄存器数组(不是将存储空间开辟在local memory中的寄存器数组),请一定联系我,跪谢。

cuda 寄存器数组使用解析