加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

这个C代码(来自lua库,Torch)如何编译/工作?

发布时间:2020-12-16 09:58:43 所属栏目:百科 来源:网络整理
导读:见 https://github.com/torch/nn/blob/master/generic/Tanh.c 例如, static int nn_(Tanh_updateOutput)(lua_State *L){ THTensor *input = luaT_checkudata(L,2,torch_Tensor); THTensor *output = luaT_getfieldcheckudata(L,1,"output",torch_Tensor); TH
见 https://github.com/torch/nn/blob/master/generic/Tanh.c

例如,

static int nn_(Tanh_updateOutput)(lua_State *L)
{
   THTensor *input = luaT_checkudata(L,2,torch_Tensor);
   THTensor *output = luaT_getfieldcheckudata(L,1,"output",torch_Tensor);

   THTensor_(resizeAs)(output,input);

   if (input->nDimension == 1 || !THTensor_(isContiguous)(input) || !THTensor_(isContiguous)(output))
   {
    TH_TENSOR_APPLY2(real,output,real,input,
     *output_data = tanh(*input_data););
    }
  else
  {
   real* ptr_output = THTensor_(data)(output);
   real* ptr_input  = THTensor_(data)(input);
   long i;
 #pragma omp parallel for private(i)
for(i = 0; i < THTensor_(nElement)(input); i++)
  ptr_output[i] = tanh(ptr_input[i]);
}
return 1;
}

首先,我不知道如何解释第一行:

static int nn_(Tanh_updateOutput)(lua_State *L)

这里的论点是什么? Tanh_updateOutput是指什么? “nn_”有特殊含义吗?

第二,“TH_TENSOR_APPLY2”和“THTensor _(…)”都被使用,但我看不到它们的定义?此文件中没有其他内容?

解决方法

nn_是一个宏.您可以通过在存储库中搜索“#define nn_”找到该定义;它在 init.c

#define nn_(NAME) TH_CONCAT_3(nn_,Real,NAME)

您可以继续遵循宏定义链,并且您可能最终得到一些令牌粘贴的东西,使nn_(Tanh_updateOutput)扩展为函数的名称.

(通用/ Tanh.c没有任何包含这是奇怪的;通用/ Tanh.c必须包含在其他文件中.对于.c文件来说这是不常见的.)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读