我目前正在將代碼從本地C++傳輸到CUDA,同時使用thrust::device_vector
s。現在有一個函數來計算漸變,我還需要訪問不僅當前元素,而且還訪問周圍的元素。在原來的代碼中,我寫道:計算推力梯度:: device_vector
void calc_grad(Complex *grad, const Complex *data, const int size)
{
for (int i = 1; i < size - 1; i++) {
grad[i] = 0.5 * (data[i + 1] - data[i - 1]);
}
grad[0] = data[1] - data[0];
grad[size - 1] = data[size - 1] - data[size - 2];
}
是否有可能創造推力functor
了這一點,這樣我可以把它稱爲thrust::transform()
?直到現在,我只能訪問一個元素,而沒有得到周圍的元素。或者無論如何,由於取決於之前和之後的因素而改變了?
的碼公式來自於matlab
功能gradient
,如下所示:http://se.mathworks.com/help/matlab/ref/gradient.html?requestedDomain=www.mathworks.com
你真的應該花一些時間閱讀推力文檔:https://thrust.github.io/doc/group__transformations.html#gaa41d309b53fa03bf13fe35a184148400 – talonmies
這個功能是不是做我的職責做什麼。還有其他類似的功能嗎? –
您可以使用'adjacent_differences'計算出的連續差異來計算您喜歡的任何訂單精確度方案,包括您在此顯示的二階中心差異。 – talonmies