關於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中的寄存器數組),請一定聯繫我,跪謝。