magic3007 / AutoGrad

🎈 A C++ code generator for the automatic derivation of tensors with linear indexes. Implementation for the lesson Compiling Technology(2020 Spring, advised by Yun Liang) in Peking University.
MIT License
7 stars 0 forks source link

Meeting Progress[04/18/2020] #2

Open easypickings opened 4 years ago

easypickings commented 4 years ago

形如A[i,j] op B[j,k]的Einstein求和(op*|/|//|%)的计算:为每个不在LHS中出现的变量j生成一重For循环

TODO:

建议大家都安装docker跑通代码

magic3007 commented 4 years ago

补充TODO

magic3007 commented 4 years ago

找助教确认的事情

magic3007 commented 4 years ago

找助教确认的事情

  • [x] 是否需要类型检查, 举个张量形状不一致的例子 A<16, 32>[i, j] = A<15, 32>[i, j] + B<16, 32>[i, k] * C<32, 32>[k, j];
  • [x] 是否可以读run.h(函数签名那里可以偷懒一下吗?
  • [x] 对于这两个例子的区别, 这样理解是否正确?
// A[i][j]=A[i][j]+B[i][k]*B[k][j]
for(int i = 0; i < n; i++)
  for(int j = 0; j < m; j++){
    for(int k =0; k < l; k++){
         A[i][j]+=B[i][k]*C[k][j];
    }
// A[i][j]=B[i][k]*B[k][j]
for(int i = 0; i < n; i++)
 for(int j = 0; j < m; j++){
   A[i][j]=0;
   for(int k =0; k < l; k++)
        A[i][j]+=B[i][k]*C[k][j];
   }
}
  • [x] 和助教确认一下目前对爱因斯坦求和规范的理解是否正确(见上)
  1. 不需要
  2. 不可
  3. 注意, 问过了助教, 助教的理解和我们的完全不一样, 这里不是严格的爱因斯坦求和规则 每一个statement一定是一个严格的loop nest, kernel就是最内层的语句

magic3007 commented 4 years ago

补充TODO

  • [ ] 找个开源json库

https://github.com/nlohmann/json