我已經撰寫了將在FPGA設備上運行的內核代碼。目前,我正在寫主機代碼,它將在CPU上運行。在與我的教授的最后一次會議上,他告訴我,主機中的資料(在我的例子中是陣列)不應該位于與設備相同的記憶體空間中。因此,他要求我在主機部分的資料上使用指標。
實際上,1- 我不確定我是否理解為什么資料應該位于兩個不同的位置。
2-如何使用指標來使用不同的記憶體位置。
。3-下面是主機中的陣列。你知道如何將這些陣列轉換為指標嗎?
int array_X_set[5430] [20]。
int array_Y_set[5430] 。
for (int i =0; i < 5430; i ) {
for (int j =0; j < 20; j )
array_X_set[i][j] = array_X_dataset[i][j];
array_Y_set[i] = array_Y_dataset[i];
}
int X_train[4344][20] = {};
int Y_train[4344] = {};
int X_test[1086] [20] = {};
int Y_test[1086] = {};
uj5u.com熱心網友回復:
你目前已經在堆疊上分配了你的陣列。這限制了最大的錯誤大小。最好是使用堆分配的(一維)指標:
int* array_X_set = new int[5430*20] 。//對二維陣列進行線性化處理。
int* array_Y_set = new int[5430] 。
for (int i = 0; i < 5430; i ) {
for (int j = 0; j < 20; j )
array_X_set[i j*5430] = array_X_dataset[i j*5430] 。
array_Y_set[i] = array_Y_dataset[i];
}
int* X_train = new int[4344*20] 。
int* Y_train = new int[4344] 。
int* X_test = new int[1086*20] 。
int* Y_test = new int[1086] 。
在你的代碼的最后,不要忘記再次釋放分配的記憶體。每一個new[]都必須有一個相應的delete[]:
delete[] array_X_set;
delete[] array_Y_set;
delete[] X_train;
洗掉[] Y_train。
洗掉[] X_test。
洗掉[] Y_test。
所有這些陣列都在主機(CPU)一側的主系統記憶體中。在你的設備(FPGA)上,你需要分配相同數量的(設備)記憶體作為OpenCL Buffer 物件。然后你可以用enqueueWriteBuffer()和enqueueReadBuffer()將資料復制過來。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/315473.html
標籤:
上一篇:如何在回傳之前等待回圈中的承諾?
