【发布时间】:2014-03-16 19:59:43
【问题描述】:
我正在对一个用 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 矩阵,它应该是二维的。你们有谁
知道如何访问给定矩阵的内容?
【问题讨论】:
-
您可能已经使用
int** image编译了您的代码,但除非您仔细处理@talonmies 提供的链接以及下面给出的答案. -
如果您没有注意到,您的代码格式完全是一团糟。代码行的格式应与问题文本分开,缩进 4 个空格。不要将特殊格式字符
>放在您发布的每一行的开头。如果您想在此处发布问题,请找出适当的格式并重新编辑您的问题直到格式正确,以方便其他人阅读。 -
哦!我现在没有注意到它:/ sry 编辑:我更新了问题