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中的暫存器陣列),請一定聯絡我,跪謝。