Pytorch源码阅读-ch4-Tensor并行运算
文章目录
这章主要包括THTensor
是如何进行并行计算,进行性能优化的
THTensorMath
以ThTensor_(cadd)为例,说明一个tensor并行计算的具体做法
|
|
THBlas_(axpy)
: 实现
TH_TENSOR_APPLY3_CONTIG
适用于全连续的tensor计算,最后一个参数作为lambda的一部分,这里有openmp与tbb两种实现,以openmp为例
is_parallel_region 首先判断是否在当前并行环境内,omp_in_parallel()
如果在的话直接运行表达式,否则
at::parallel_for
中pytorch自己实现的并行方法
TH_TENSOR_APPLY3_PARALLEL
适用于经过变换的非连续tensor, 为了方便阅读,下面代码只保留了三个中的一个tensor
|
|
__TH_TENSOR_APPLYX_PREAMBLE
1.从最外层的索引开始循环,直到到达数据不再连续的维度,即该维度的跨距不等于由外层维度定义的张量的大小。原理很简单,对比stride与tensor size的大小是否一致即可
2.storageOffset + stride_B * index_B
向量化指令与动态派发
pytorch中调用THVector_(cadd)
的时候实际调用的是THVector_(cadd_DISPATCHPTR)(z, x, y, c, n)
这个函数本质是一个函数指针,指向的是默认实现THVector_(cadd_DEFAULT)
THVector_(cadd_DISPATCHTABLE)[]
不同的向量化指令实现定义在该数组中
代码位置: TH/vector/simd.h
|
|
文章作者 Sun.StriKE
上次更新 2019-10-08