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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章