【CUDA開發】Thrust庫
阿新 • • 發佈:2019-02-17
Thrust庫從C++的STL中得到靈感,將最簡單的類似於STL的結構放在Thrust庫中,比如STL中的vector。此外,Thrust庫還包含STL中的演算法和迭代器。
Thrust函式庫提供了兩個向量容器,分別為主機和裝置提供了向量類並且分別駐留在主機和裝置的全域性記憶體中。向量可以使用陣列下標進行讀取或者修改。然而,如果向量在裝置上,那麼對於每個這樣的訪問,Thrust通過PCI-E匯流排在後臺執行單獨的傳輸,因此,將這樣一個結構放在迴圈裡不是一個好的主意。
Thrust提供了大量的函式型別集合,包括:轉換(transformation),規約(reduction),字首求和(prefix sum),再排序(reordering),排序(sorting)。Thrust並不是傳統意義上的函式庫,因為它的所有內容都在所包含的標頭檔案中。因此,要避免包含所有的檔案。只要包含需要的標頭檔案就行了。
通過如下程式碼,我們可以建立對應的host_vector和device_vector向量物件:
C/C++ code ?
Thrust函式庫提供了兩個向量容器,分別為主機和裝置提供了向量類並且分別駐留在主機和裝置的全域性記憶體中。向量可以使用陣列下標進行讀取或者修改。然而,如果向量在裝置上,那麼對於每個這樣的訪問,Thrust通過PCI-E匯流排在後臺執行單獨的傳輸,因此,將這樣一個結構放在迴圈裡不是一個好的主意。
Thrust提供了大量的函式型別集合,包括:轉換(transformation),規約(reduction),字首求和(prefix sum),再排序(reordering),排序(sorting)。Thrust並不是傳統意義上的函式庫,因為它的所有內容都在所包含的標頭檔案中。因此,要避免包含所有的檔案。只要包含需要的標頭檔案就行了。
通過如下程式碼,我們可以建立對應的host_vector和device_vector向量物件:
C/C++ code ?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
#include <thrust/host_vector.h> #include <thrust/device_vector.h>
#include <iostream>
int main( void ) {
// H has storage for 4 integers
thrust::host_vector< int > H(4);
// initialize individual elements
H[0] = 14;
H[1] = 20;
H[2] = 38;
H[3] = 46;
// H.size() returns the size of vector H std::cout << "H has size " << H.size() << std::endl;
// print contents of H
for ( int i = 0; i < H.size(); i++)
std::cout << "H[" << i << "] = " << H[i] << std::endl;
// resize H
H.resize(2);
std::cout << "H now has size " << H.size() << std::endl;
// Copy host_vector H to device_vector D
thrust::device_vector< int > D = H;
|