cuda 複雜問題 + 細節問題 解答 見 cuda複雜問題 + 細節問題 解答
網上沒找到如何拷貝二維陣列到gpu的例程,所以我就自己寫乙個,其實原理也很簡單,就是用三維指標匯入給二維指標分配記憶體。
先說一下我們的目標:匯入到gpu乙個二維陣列:dev_data[arraynum][mwidth * mheight],該陣列內元素的值是data[i][j] = i + 0.001*j。我們首先先輸出data[i][7]。
然後我們再在gpu裡把陣列的data[i][7]全都改為82,然後再輸出所有的data[i][7]。
最後應該得到的結果:
先說一下基本流程:
#include "cuda_runtime.h"
#include "device_launch_parameters.h"
#include "cuda.h"
#include using std::cout;
using std::endl;
#define arraynum 100
#define mwidth 10
#define mheight 10
float **data;
float ** middata;
float **dev_data;
int main()
cout << endl;
cout << endl;
//改變一下gpu記憶體資料
cudachange << > >(dev_c, dev_data);
//輸出一下改變以後的值
cudatest << > >(dev_c, dev_data);
cudamemcpy(c, dev_c, arraynum * sizeof(float), cudamemcpydevicetohost);
for (int i = 0; i < arraynum; i++)
cout << endl;
cout << endl;
system("pause");
return 0;
}
核函式:
__global__ void cudatest(float *c, float **dev_data)
__global__ void cudachange(float *c, float **dev_data)
重點內容是datainit()函式,負責資料的初始化:
float **data;
float ** middata;
float **dev_data;
首先先把二維陣列進行初始化:
data = (float**)malloc(arraynum * sizeof(float * ));
middata = (float**)malloc(arraynum * sizeof(float *));
cudamalloc((void***)&(dev_data), arraynum * sizeof(float * ));
middata的作用是:
}這樣就能把二維陣列拷貝到記憶體裡使用了。
C 二維陣列拷貝到另乙個二維陣列
有如下陣列 a 1 2 3 4 5 6 7 8 9 10 11 12 要把這個陣列的第一行和第三行拷貝到乙個新的陣列中,即有 b 1 2 3 4 9 10 11 12 如下 int a new int int logicnum a.getlength 0 3 int framenum a.getle...
二維vector傳遞到CUDA中實現平行計算
std vector傳遞到cuda中實現平行計算 我們知道std vector記憶體分配時連續的,但是對於二維陣列或多維陣列來說,內部vector不占用外部vector的空間,所以二維陣列或多維陣列內部每一行的記憶體都是連續的,外部vector儲存內部vector的相關資訊,也是連續的。詳細內容可參...
c 二維陣列傳遞與拷貝
定義 string arr new string 12,31 另一種string ary new string 5 相當於一維陣列 常量二維陣列定義,用readonly不能用const readonly int dir 如果是靜態在前面直接加static 傳遞void print2darray in...