2017/03/05

Ryzenでそのうち組もうと計画を・・・

たまたま発売日にお休みだったので、Ryzenを買いに行ってみました。
が、事前情報通りX370マザーの種類がなく、入荷数も少ない(行ったときはまだありましたが)ので、別に全く急いでいない僕は使いなれたASUSのマザーが潤沢に出回るまでまってからでよいんじゃね?と思い直してそのまま帰ってきました。

どうもAVX2周りがintelの実装と異なるようで、現時点ではうまく最適化が働かない?のかなという印象。
AMD「Ryzen 7 1800X」はIntelの牙城を崩せるか?
ベクター処理はうまく動いていそうなので、単に最適化の問題なのであればx264,265の最適化を待てばよいだけですし。

というわけで、来る日に備えて8コアを使い切れるようにスクリプトを改変せねば。
・・・まずは今のまま、処理を見直しますかね。
と思ってプリプロセスの部分の見直しに着手。
僕のエンコードは無駄にプリプロセスに20%近くの時間をかけているため、まずはそこを並列処理させ、そののちに本体も、という計画。

というわけで、並列処理をやるにはどうするかを考えていたのですが、batでやるよりもperlにやらせた方が楽だな、という結論に。
というわけで、use threadsを勉強中です。

perlthrtut - Perl におけるスレッドのチュートリアル

本体は複数エンコードを走らせるぐらいしか思いつかないので、CMカット部分で別処理でエンコードさせようという計画です。
・・・なんとなくiピクチャが増える分エンコードサイズが増えそうな気しかしないですが、それはおいおい。

とか言っているうちにすべてをperlで書き直したくなってきた・・・いや、やらないけど

ひとまずネット上の情報を参考に、下記のようなコードに。

foreach my $i(1 .. $num){
my $thread = threads->new(\&divenc,$i,$num);
push(@threads, $thread);
}

foreach(@threads){
my $retdata=$_->join;
}

sub divenc{
}

とりあえず4並列にさせていままで10分かかっていたものが4分で終わるようになりました。
24minをエンコードするのに45分かかっていたものが40分に。
単純に並列数に反比例しないのは、まぁ仕方がないですね。

0 件のコメント:

コメントを投稿