今天听了刘天添老师的课,总结一下taichi debug的方法

1 ti.init的设置(开启debug mode)

进行如下设置

ti.init(arch=ti.cpu, debug=True, excepthook=True, cpu_max_num_threads=1, advanced_optimization=False)

第一个表示用cpu
第二个表示debug mode,意味着开启断言
第三个表示使得报错更加美观
第四个表示单核运行
第五个表示关闭高级的编译优化

如图为更美观的报错
如图为一般的报错

2 print使用方法

  1. taichi不等同于python的print,有些功能如print(f"the i is {i}")不能用
  2. taichi的变量需要转为numpy数据才能输出

print用法1: 输出整个filed到csv

例子
(要import csv)

np.savetxt("out.csv", position.to_numpy(), delimiter=',')

这代表我有一个taichi的field,表示粒子的位置,名为position
把他输出到一个叫out.csv的文件里,用逗号分割,每行换行
用excel就可以打开
如图

print 用法2:format print

现在可以使用format print了,如下方法

print("\i is {}, j is {}:".format(i,j),end='')

类似于c++中的变量输出,按顺序填写
end=’'表示最后不换行

3 使用GUI看流场

例如我要看SPH结果的粒子

gui = ti.GUI("SPHDamBreak")
while gui.running: gui.circles(position.to_numpy(),radius=1.5,)

即可

4 使用断言

有两种,一种是python本身的断言,一种是ti.static_assert

4.1 assert

必须开启debug mode, 运行时断言

例如对一个数x求根号,那么当x输入为负数的时候自动报错。即将x断言为>=0

@ti.kernel
def sqroot(x:ti.f32)->ti.f32:assert x>=0sq=ti.sqrt(x)return sqsqroot(-99.1)

那么我传入了负数,就会如下报错

4.2 ti.static_assert()

编译时断言,不必开启debug mode
只能检查数据类型,容器形状和维度

一般搭配ti.template()使用
官方例子:

@ti.func
def copy(dst: ti.template(), src: ti.template()):ti.static_assert(dst.shape == src.shape, "copy() needs src and dst fields to be same shape")for I in ti.grouped(src):dst[I] = src[I]return x % 2 == 1

使用断言暂停的一些技巧

在定位bug位置的时候,使用
assert 1==2
可以保证在想要停下的位置停下,以确保之前的代码运行正确。

taichi debug方式总结相关推荐

  1. Scrapy的debug方式

    Scrapy不方便调试,但是为了深入学习框架内部的一些原理,有时候仅仅依靠日志是不够的.下面提供一种scrapy的debug方式 demo直接用来自官方例子来演示:https://github.com ...

  2. InterlliJ Debug方式启动:Method breakpoints may dramatically slow down debugging

    一:错误       debug方式启动idea的时候IDE 提示该问题,且启到mybatis的时候不动也不报错,原因是在方法上添加了断点,将断点取消即可. 二:解决    查看所有断点::      ...

  3. oracle的存储过程调试,oracle 运行普通方式及调试debug方式存储过程性能区别

    调试某一存储过程时,在plsql developer debug调试执行时,20多分钟都执行不完, 后分析如下: 1,查询调试会话运行存储过程的对应sql select sid,serial#,eve ...

  4. tomcat源码分析(一)初始化---Debug方式

    引用网址: http://tomcat.apache.org/tomcat-6.0-doc/architecture/startup/serverStartup.txt http://tomcat.a ...

  5. debug方式看Activity启动流程小记

    Activity启动流程虽然很多博客讲了很多次了,但是这一次是自己的亲身体会 1.前言 debug需要gradle里面编译版本和官方模拟器api版本一致(这里源码是api25) 2.准备材料 1.ap ...

  6. php有哪些debug方式,Console有哪些Debug方法

    这次给大家带来Console有哪些Debug方法,使用ConsoleDebug的注意事项有哪些,下面就是实战案例,一起来看一下. 前言 在过去的十年中,我最热衷的事情之一就是前端开发(特别是JavaS ...

  7. Android 8.1 Doze模式分析(五) Doze白名单及Debug方式

    1.Doze模式下豁免的应用和白名单列表 1.什么是白名单列表? 一系列应用包名的集合. 2.有什么作用? 处于白名单列表中的应用,不受Doze的影响,即Doze不会对该应用进行限制,如该应用的Job ...

  8. 关于Debug和Release编译方式

    问:怎么在VC6中把工程编译成release版本? 答:可以project->Set Active Config,选中release版本.此后,按F5或F7编译所得的结果就是release版本. ...

  9. Debug 和 Release 编译方式

    Debug 和 Release 编译方式的区别本文主要包含如下内容: 1. Debug 和 Release 编译方式的本质区别 2. 哪些情况下 Release 版会出错 3. 怎样"调试& ...

最新文章

  1. idea崩溃导致的svn插件丢失问题, maven dependencies视图丢失问题
  2. MySQL 的性能(下篇)—— 性能优化方法
  3. spring根据名称获取bean_带你从零开始手写 spring ioc 框架,深入学习 spring 源码
  4. Kafka常用操作命令总结
  5. python的numpy库的基本用法_python numpy库np.percentile用法说明
  6. ​多任务学习漫谈:行梯度之事
  7. 可以公开访问的 SAP gateway demo system ES5/002
  8. 比较全的log4j示例
  9. 在C语言中如何让常量起作用,解析C语言中如何正确使用const
  10. 《Business Rules Engine Overview》--《业务规则引擎概述》write by Mark Kamoski
  11. pod install速度慢解决方案
  12. UVA1226 LA3997 Numerical surprises【大数】
  13. PowerPhotos:Mac照片库管理软件
  14. 英雄联盟大乱斗一个队出现两个杰斯-多线程死锁
  15. python寻找完全平方数_279 完全平方数(bfs)
  16. 尾气冒黑烟是什么问题_汽车排气管冒黑烟,怎么回事?
  17. 失语者的狂欢,觉醒者的自焚 ——《杀生》影评
  18. 用户路径分析之利器“桑基图”
  19. Android 仿微信实现语音聊天功能
  20. JavaScript中的计时器与定时器

热门文章

  1. Power BI——DIVIDE函数
  2. dreamweaver 服务器文件夹 本地站点文件夹,使用站点定义向导定义本地文件夹
  3. Pareto(帕雷托)理论
  4. 零基础到CS开发高手通用权限管理系统全程实录
  5. Relative Positional Encodings
  6. 无功补偿装置三种投切方式(转载)
  7. 个人推广APP的心得:有的放矢
  8. 如何把一个锅刷成电影质感?【转】
  9. java中如何将子弹向对角发射_Java 坦克大战 tankwar
  10. 2022.3《樊登将论语》