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