我正在並行化一個用Matlab編寫的程序。如何索引CUDA內核中的Matlab數組
此刻,我有以下代碼:
#define _USE_MATH_DEFINES
#include "cuda_runtime.h"
#include "device_launch_parameters.h"
#include <math.h>
__global__ void radialAverage(double** image, int x_center, int y_center)
{
int i, x, y;
const int x_size = 400;
const int y_size = 400;
int thread = blockIdx.x*blockDim.x+threadIdx.x;
double angle = 0;
double dAngle = M_PI/360;
double radImgMat[x_size][y_size];
double angleMatPi[x_size][y_size];
//radImMap erstellen
for(x = 0; x < x_size; x++) {
for(y = 0; y < y_size; y++) {
radImgMat[x][y] = sqrt((double)(x+1-x_center)*(x+1-x_center) + (y+1-y_center)*(y+1-y_center));
}
}
//Angle-Matrix (pi-pi) erstellen
for (x = 0; x < x_size; x++) {
for(y = 0; y < y_size; y++) {
float xD = x+1-x_center;
float yD = y+1-y_center;
if(yD>0) {
angleMatPi[x][y] = -1*(atan(xD/yD)+M_PI/2)+M_PI;
} else if(yD==0 && xD<0) {
angleMatPi[x][y] = M_PI;
} else if(yD==0 && xD>0) {
angleMatPi[x][y] = 0;
} else {
angleMatPi[x][y] = -1*(atan(xD/yD)+M_PI/2);
}
}
}
//Cut ImgMat
for(x=0; x < x_size; x++) {
for(y = 0; y < y_size; y++) {
if((angleMatPi[x][y] < (angle-dAngle)) || (angleMatPi[x][y] > (angle+dAngle))) {
image[x][y] = 0;
}
}
}
}
在純C++它工作得很好,但我得到的錯誤,當我嘗試 指數int* image
矩陣,這應該是2D。 有沒有人知道如何訪問給定矩陣的內容?
你可能已經得到了你的代碼來用'int ** image'進行編譯,但除非你仔細處理@talonmies給出的鏈接,以及下面給出的答案,否則這就是你會得到的。 –
如果你沒有注意到,你的代碼格式是一個完整的混亂。代碼行應通過縮進4個空格與問題文本分開格式化。不要在您發佈的每一行的開頭放置特殊的格式化字符'>'。如果您想在此發佈問題,請通過計算出適當的格式,讓其他人閱讀並重新編輯您的問題,直到格式正確爲止。 –
哦!我沒有注意到它現在:/ sry編輯:我更新了問題 – TheTrueFreeStyle