【发布时间】:2011-05-13 11:36:24
【问题描述】:
你好, 关于以下问题,我可能有一个直截了当的问题:
我有一个函数
double afunction(double *myarray)
{
double ret = 1.0;
for(int i = 0; i < 4; i++)
ret *= myarray[i]*myarray[i];
return ret;
}
现在我想修改它,以便传递两个新参数:int index,描述要更改的 myarray 的哪个索引,如下所示:myarray[ index ] = *add;。这将是以下内容:
double afunction(double *myarray, int index, double *add)
{
myarray[ index ] += *add;
double ret = 1.0;
for(int i = 0; i < 4; i++)
ret *= myarray[i]*myarray[i];
return ret;
}
问题是:我不想修改数组 myrray 并且我不想为此创建一个新数组,因为内存-问候(这稍后将在 GPU 上计算,无论如何我无法在内核函数中分配一个全新的数组。
轻松解决这个问题?
谢谢!
编辑
对不起,我打错了一些东西。取而代之的是myarray[ index ] = *add; 我的意思是myarray[ index ] += *add;
EDIT2
一个更大的函数的例子,以后可以很容易地扩展到大约 50 个不同的返回案例。因此,让 if 语句修改特定值 myarray[index] 并在每个返回案例中添加 *add 非常难看:(
double afunction(double *myarray, int funcIndex, int indexAdd, double *add)
{
myarray[ indexAdd ] += *add;
if(funcIndex >= 1 && funcIndex <= 4)
return myarray[1]*myarray[1]*myarray[2];
switch(funcIndex)
{
case 5:
return sin(myarray[3]) * cos(myarray[1]);
case 6:
double ret = exp(myarray[1]);
for(int i = 1; i < 5; i++)
ret *= (myarray[ i ]-myarray[ 5-i ]);
return ret;
case 7:
double ret = 0.0;
for(int i = 1; i < 10; i++)
ret += myarray[ i ];
return ret;
}
return 0.0;
}
【问题讨论】: