本博客仅用于记录自己在学习胡渊鸣老师的Games 201 高级物理引擎实战课程中,遇到的问题以及知识总结,不定时更新。如有侵权,请联系, 删除处理。有内容问题欢迎批评指出。
课程相关链接:
Games201 常用链接(上面的论坛帖子里也有)
GAMES 的主页【201相关链接在:导航栏/在线课程/GAMES201】
课程主页:https://www.cnblogs.com/marsggbo/p/13033357.html
Taichi 论坛 forum.taichi.graphics/c/games201/ ; 记得在 GAMES201的版块发帖,其余板块用的是英文
课程课件 github.com/taichi-dev/games201/releases
Taichi 主页 github.com/taichi-dev/taichi
Taichi 中文文档 taichi.readthedocs.io/zh_CN/latest
直播地址 webinar.games-cn.org
文章目录
问题总结
一、代码运行错误
1. “OSError: could not get source code”
问题描述: 只要是加了
@
t
i
.
k
e
r
n
e
l
@ti.kernel
@ti.kernel 命令后的函数,在调用时就会出现
"
O
S
E
r
r
o
r
:
c
o
u
l
d
n
o
t
g
e
t
s
o
u
r
c
e
c
o
d
e
"
"OSError: could not get source code"
"OSError:couldnotgetsourcecode"错误。并且在win运行没有错误,ubantu 16运行时出现的这个问题。
问题原因: 在bash或者idle直接运行时会报这个错误,可以考虑切换到jupyter或者iPython。
问题解决: 由于我是远程使用,jupyter操作不顺,于是就直接安装ipython,输入 i p y t h o n ipython ipython命令即可使用。(可搜索安装教程操作)
知识总结
1. cuda中前缀global、host和device的区别
CUDA 三种前缀分别用于在定义函数时限定该函数的调用和执行方式,例如:
(1)host int foo(int a){}与C或者C++中的foo(int a){}相同,是由CPU调用,由CPU执行的函数
(2)global int foo(int a){}表示一个内核函数,是一组由GPU执行的并行计算任务,以foo<<>>(a)的形式或者driver API的形式调用。目前__global__函数必须由CPU调用,并将并行计算任务发射到GPU的任务调用单元。随着GPU可编程能力的进一步提高,未来可能可以由GPU调用。
(3)device int foo(int a){}则表示一个由GPU中一个线程调用的函数。由于Tesla架构的GPU允许线程调用函数,因此实际上是将__device__ 函数以__inline形式展开后直接编译到二进制代码中实现的,并不是真正的函数。
总结:device前缀定义的函数只能在GPU上执行,所以device修饰的函数里面不能调用一般常见的函数;global前缀,CUDA允许能够在CPU,GPU两个设备上运行,但是也不能运行CPU里常见的函数;host前缀修饰的事普通函数,默认缺省,可以调用普通函数。
在深度学习框架中(例Caffe、Faster R-CNN),调用 CUDA函数,使代码加速。
源自转载,详见博客:cuda 函数前缀:device/global/host 相关问题
延伸到 Taichi 中函数和内核的区别:
2. bash 和shell的区别
shell是你(用户)和Linux(或者更准确的说,是你和Linux内核)之间的接口程序。你在提示符下输入的每个命令都由shell先解释然后传给Linux内核。shell 是一个命令语言解释器(command-language interpreter)。拥有自己内建的 shell 命令集。此外,shell也能被系统中其他有效的Linux 实用程序和应用程序(utilities and application programs)所调用。
常用的shell:在Linux 和 UNIX系统里可以使用多种不同的shell可以使用。最常用的几种是 Bourne shell (sh), C shell (csh), 和 Korn shell (ksh)
bash: Bourne Again shell (bash), 正如它的名字所暗示的,是 Bourne shell 的扩展。bash 与 Bourne shell 完全向后兼容,并且在 Bourne shell 的基础上增加和增强了很多特性。bash 也包含了很多 C 和 Korn shell 里的优点。bash 有很灵活和强大的编程接口,同时又有很友好的用户界面。
源自转载,详见:什么是shell? bash和shell有什么关系?
查看当前shell版本及更改 shell 版本:
查看 shell 版本,对应的“
s
h
e
l
l
名
称
−
−
v
e
r
s
i
o
n
shell名称 --version
shell名称−−version" 即可。
参考博客:https://www.cnblogs.com/20170722-kong/articles/8018452.html