首页 > 代码库 > 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 寄存器数组使用解析