【发布时间】:2017-03-02 10:01:35
【问题描述】:
这似乎是一个奇怪但非常基本的问题。我尝试在 pyopencl 中做一个简单的操作。下面给出的是代码,如果我将我的位置与 exp(-f_sum/sigma2)/sigma2 相乘,我得到 0(即使我的两个位置和 sigma 都有非零值)但是当我添加值时,我得到了正确的结果。
kernelsource = """ __kernel void forceFinder(
const int N,
const int dim,
const float sigma,
const float resistant,
__global float* datacl,
__constant float* poscl,
__global float* res
)
{
int i = get_global_id(0);
float f_sum ;
int k;
float sigma2 = sigma * sigma;
float tempo;
if (i < N ) {
f_sum = 0;
for (k = 0; k < dim; k++)
{
f_sum += pown((poscl[k] - datacl[i * dim + k]), 2);
}
for (k = 0; k < dim; k++)
{
res[i * dim + k] = (datacl[i * dim + k] - poscl[k]) * exp(-f_sum/sigma2)/sigma2;
}
}
}
"""
如果我用“+”替换最后一个循环中的“*”而不是“*”,我会得到输出
【问题讨论】: