07/05/13 00:56:51 NViMoeQ1
vector pipelineとscalarのvector的なpipelineをモレは別物だと見てる。
scalar processorでのいわゆるベクトル的な物はsoftpipeを指していると思うが
softpipeは簡略に言うと、iterationを展開してload -> 演算 -> store命令を
iteration間を跨がせる様にschedulingする事とも言える。このときCPU
pipe lineはloop bodyをあくまで縦にsequentialに流してゆくのが基本。
これはgemmの様な細いstreamのloopだとvector pipe line のsoftware +
scalar CPU pipelineによる回りくどいemulationにも似ていて、
違いはscalar命令が個々の要素に対し毎回実行される点だとも言える。
しかしloop bodyが複雑になってくるとvectorは時にwork 配列を使ってまでも
loop body をsplitし、細分化したloop内の少ないstreamをindex 変数方向に
pipeline化…横にpipelineを伸ばしそれを縦に束ねたような流れ…となるのに対し、
scalar のsoftpipeでは(配列を使ってsplitすることもできるが、load/stoerのコスト
がvectorより高いので滅多に有効ではない)大量のregister spillを起こさせながら
loop展開し、loop body内をsequentialに実行+先行prefetchやloadを投入する。
pipelineを流れるstreamの向きが直行と言っていいほど変わってくる。
>>250 あなた素人じゃなさそうだね、ニヤリ。酒飲んでくる ノシ