「ThreadではなくFiberを使えと言ってる」のフェンス君の迷言はどこから来たのかな?
32x4 HWスレッドのHPCプログラミングをC++でシコシコやるのか?
>>948 インテルのドキュメントに書いてあるが、静的にわかるレイテンシーの隠蔽にはfiberを、動的にしかわからないレイテンシーの隠蔽には(hw-)threadを使う
Fiberはソフトウェアスレッドなので、レジスタセットが複数個あるといったハード的な仕掛けは特にない
スレッドコンテキストとしてセーブすべきレジスタはコンパイル時にわかっているので、コンテキスト切り替えのオーバーヘッドは低い
データのやりとりをしないコルーチンみたいな感じ
スレッドの切り替え先もコンパイル時にわかっていれば展開されて、インターリーブされた一本のプログラムになるでしょう
補足
Fiberというのはあくまでソフトスレッドの単位で、複数のfiberが切り替わりながら、1つのhw-threadコンテクスト上で動く
で、それがどう難しいんだ?
どこぞの会社に買われて非公開になってしまったSoftWireは
HLSLをCPU側で実行する際、逐次評価ではなく動的生成したx86コードとして
実行する仕組みを実現する土台となるライブラリであった。
もっとも自己書き換えだとか動的生成だとかのトリックそのものは昔からあるがね。
Intelも自己書き換えの規則なんかのドキュメント出してるからもはや裏技でも何でもない。
上のLarrabeeの資料は、あくまでGPUの場合の話だな。
Larrabeeも他のGPU同様quad単位で処理するようで、
あるシェーダのコンテキストのquadを1xcoreに投入
→(最大)4xHW Thread→(最大)4xFiber→(最大)64xstrands
となるという説明とおれは理解した。
動作として団子の理解は間違っていないと思うが、だからといって
4xHW Thread = Fiber
という言葉の理解は奇妙に思える。
少なくともIntelのおっさんもそういう説明は一切してなかったぜ。
難しい?
そりゃインテルの資料のファイバー/スレッドの定義すら読めない団子には難しいだろうよwww
>>957 > →(最大)4xHW Thread→(最大)4xFiber→(最大)64xstrands
(最大)10xFiber、だよ
1:1対応してると解釈されたのなら食い違いが起きても仕方がない。説明がまずかったのだろうな。
16Strandを使うときは1スレッド、64 Strandを使うときは4スレッドを使う。これはガチ。
で、その1〜4スレッドを使って、1個から10個までのFiberをスケジューリングする。
JITでコードを生成する段階で、この命令はレイテンシが大きいからインターリーブするべきって
情報はわかるわけだからな。
フェンス君=ID:ToBxbpc8は主張が一貫してないから帰って良いよ。
> そもそもIntel自体がLarrabeeではL2をスクラッチパッド的に使え、スレッドではなく
> ファイバーを使えと言っているわけで、
これの弁解を聞きたいな
>>959 -----------------
(最大)10xFiber、だよ
-----------------
あなたわ"typically"を『最大』と訳すすか。。。
プレゼンでわ"up to"と"typically"が使い分けられていることに注意すべきかと思うす。
それにしても間違いに突っ込まれて引っ込みがつかなくなってしまった団子さんと、何故か
それを信じ込んでしまっている
>>957さん。更にトンデモ翻訳の
>>959さんが集まって中傷
し合ってるこのスレッドって(笑)
>>961 > あなたわ"typically"を『最大』と訳すすか。。。
>>957にあわせただけだが、原文がtypicallyならtypicallyなんだろ
細かいところまで覚えちゃいないし、お前らと違うんで、いくらでも訂正するぜ
>細かいところまで覚えちゃいないし、お前らと違うんで、いくらでも訂正するぜ
平気で間違ったことを言ってテキトーに噛みつくだけの負け犬であることを認めたか
>>960 > 16Strandを使うときは1スレッド、64 Strandを使うときは4スレッドを使う。これはガチ。
ガチで違う
> で、その1〜4スレッドを使って、1個から10個までのFiberをスケジューリングする。
おい、いつの間に団子Fiberを引っ込めたんだ
> > そもそもIntel自体がLarrabeeではL2をスクラッチパッド的に使え、スレッドではなく
> これの弁解を聞きたいな
これはおれのセリフじゃない
インテルが公開資料で言ってるのかはともかく、間違っちゃないだろうけど
>>963 >>954-955で正しいことを書いているのに、ファイバーに対して『(最大)』とか書いてしまうこと
が理解できないすけど?ネットで検索した知識だけでわ、何の役にも立たないという例なんすかね。。。
>>965 は?最初から一貫してるよ。
お前だろ?Strandが何の単位かもわからずに独り相撲してたのはwww
フェンスに強制終了させられた人が一貫した意見を言ったことは一度もない。
間違いを平気で言って、指摘されればなかったことにするからだ。
>>964 なんかの仕様でもあるまいに、こんな間違いに噛み付いても仕方ないと思うんだが、まあ他に噛み付けるところなんてないもんな
で、お前もやっているわけだが
>>960 > で、その1〜4スレッドを使って、1個から10個までのFiberをスケジューリングする。
2個から10個だろ
> among 2-10 fibers in order to cover long latencies (e.g. texture filtering)
逆に言うとレイテンシの短い命令を使うシーケンスであれば1 Fiberでも十分なんだがな
まあJITレイヤーのやることだからいいとしよう。
MACヲタの引用してきたWin32のFiberは全くの別物だよ。
基本的にJITで動的コード生成なんてごく一部でしかやらないし。
>>966 お前もしばらく大人しくしてたと思ったら、こんなところにしか突っ込みようがないのかよ
Intel> - Thread: a HW-managed context that switches among 2-10 fibers in order to cover long latencies (e.g. texture filtering)
おれの見てた資料はこう、up toともtypicallyとも書いてないわけ
わかった?
>>957 > →(最大)4xHW Thread→(最大)4xFiber→(最大)64xstrands
んで、これに合せて(最大)とつけただけだ
まあ、原義にこだわるだけ団子よりマシか、MACオタが自身つっこまれるとはぐらかすだけだがな
972 :
MACオタ:2008/10/05(日) 13:58:01 ID:IsV0akqP
ところでLarrabeeのタスク管理の話わ、つい一ヶ月前にこのスレッドで議論された筈なんすけど
健忘症のヒトが多すぎるす。
落ち着いて
>>132,
>>153-159あたりを読み直してから、議論を続けると不必要な恥を晒すことも
なくなるかと思うす。
とりあえず団子さんも
>>863-864わ、当分コピペネタになることわ覚悟したほうが良いかと。
>>971 ------------------
おれの見てた資料はこう
------------------
その資料の13ページ以降をどうぞ。それとも実わ、資料なんか見てないのがバレたすか?
------------------
これに合せて(最大)とつけただけだ
------------------
それが内容を理解していない証拠なんすけど。。。
>>972 どうぞ?
勘違いをしてるのはどっちなのかは冷静に考えればわかること
確かにハードウェアスレッドは4本みたいだわ。調べておくべきだった。
頻繁にFiberが切り替わることが前提だと考えると、
一般的な実装のようにレジスタのメモリへの復帰と退避ではなく、
ループアンローリング的にビルドタイムにレジスタを割り当てて処理されるものと勘ぐってしまったんだけどどうなんでしょ?
そもそも1つHWスレッドに対してベクトルレジスタが16本かどうか探しきれなかったんだけど
GPUでちょっと長めのシェーダー使うとだいたい10〜16位レジスタを使うことを考えると
ベクトルレジスタに余裕がない。
マスクレジスタでレジスタを節約しながら使うのかもしれないけどマスクするって事は滅茶苦茶ALUが無駄なような。
>>975 ------------------
一般的な実装のようにレジスタのメモリへの復帰と退避で
------------------
その一般的な実装す。
>>153-159をどうぞ。
原文わ、
>>113のリンク先のp.25す。
>>972 もう一度言おうか?
> この中に出てくるLarrabeeにおけるコンテキストの最小単位"Fiber"って、リソースがダブらないよう
> に複数の処理をするコードを自前で書けという意味にも取れるす。
これ「ソフトパイプライニング」と何が違うのかしら?AppleのAltiVec最適化マニュアルにも載ってるアレ。
でもLarrabeeのソフトGPUではJITで動的にx86コードを生成する際にインターリーブしてくれるから
十分に並列度の高いコードを書いていれば意識する必要はない。
WindowsにおけるFiberはあくまでソフトGPUでの処理単位で
SIMDユニットのベクトル長・レジスタセット・HWスレッドを隠蔽し
抽象化された単位。
ちなみにVC++には2008においてもスレッド数以上のコンテクストをサポートする機能なんてないぞ
.NET?しらね
>>977 それ間違いで、正しくわ
>>153す。
レジスタが少ないのでリソースわダブるし、スタックへの退避も発生するす。
一ヶ月以上前の話を未だに誤解しているのもちょっと。。。
とにかく冷静になって過去ログを読み直して欲しいす。
>>976 申し訳ない。
カキコしてから気づきました。
今読んでます。
これってテクスチャフェッチなんかの長いレイテンシを隠すためにFiber使って、
データストール回避にHWスレッド使うって事になるのか。
混乱してきた。
>>975 4スレッド全部使えばVPU1器に対して64本のSIMDレジスタがあることになるけどこれじゃ少ない?
そうは思わんがねぇ
レジスタ足りなきゃ別にL1に待避してもいいんでない?
メモリアドレッシングモードでロード・積和算を1命令で行えるわけだから。
>>980 ------------------
これってテクスチャフェッチなんかの長いレイテンシを隠すためにFiber使って、
データストール回避にHWスレッド使うって事になるのか。
------------------
逆す。ソースわ
>>850。
昨日からの団子さんの書き込みわ、恥ずかしい間違いをごまかすためにトンデモ論になっているので
マトモに受け取らないことをお勧めするす。
普段わ、これほど酷くも無いので、見捨てないであげて欲しいす。
>>984 団子 さん
SiggraphのLarrabee講演わ『ゲームプログラマ向け』す。
Win32 Fiberは端的に言えばRubyのThreadの実装と同じだよ。
べつに命令レベルでインターリーブするわけではない。
要するに古いゲームとか、組み込みとかで使われてる昔ながらのタスクシステムだよ。
>>973 > それが内容を理解していない証拠なんすけど。。。
はいはい
厳密なのはけっこうだが、ROBがx86用語である証拠は見つかったかい?
>>977 > これ「ソフトパイプライニング」と何が違うのかしら?AppleのAltiVec最適化マニュアルにも載ってるアレ。
っぽいけどちょっと違うな
パイプライン化するのが他イテレーションではなくて、他のファイバーになる
>>986 --------------------
命令レベルでインターリーブする
--------------------
そちらわLarrabee用語でも『スレッド』。ファイバーわ、あなたが書いている通りの『協調型マルチタスク』す。
--------------------
要するに古いゲームとか、組み込みとかで使われてる昔ながらのタスクシステムだよ。
--------------------
990 :
Socket774:2008/10/05(日) 14:35:39 ID:hpAFqnz6
>>986 Rubyって表現はまずいよ。YARVはネイティブスレッドだ。
公式のインタプリタって言っておかないと。
>>988 は?RubyのThreadがハードウェアスレッドにもソフトウェアスレッドにも依存せずにやってることすら知らないのか?
>>990 まあそうだな。
ちなみにYARVは俺も開発にかかわってる某ライブラリによってネイティブコードを生成する
ように動いてるんだが。
>>989 --------------------
LarrabeeのFiberの実装
--------------------
>>153に書いた通りすけど。。。 原文わ、
>>113のリンク先のp.25す。
>1ファイバーはハードウェア的には4スレッドなわけだよ
団子の謝罪マダー??
人に氏ねとかいえるくらい自信あったんだからな。
もちろんこのスレから引退覚悟ですよね。
>>993 関数レベルのインターリーブと命令レベルのインターリーブの違い。
だから別物って言ったの。
JITだから為しえる業。わかる?
>>994 別に。何も違いはしない。
複数ファイバーが同じコアで動く1〜4スレッドに割り振られることもある。
最大64のファイバーのうち最大4つが1コアに割り当てられるだろ?
>1ファイバーはハードウェア的には4スレッドなわけだよ
ハードウエア的にはの意味は? なんで1ファイバーが4スレッドって書き方になるの?
素直に間違ったと認めろよ。
>>996 また団子ファイバーの定義が変わってる。。。
笹田さんもいい迷惑だな
JITに依存した技術を、ネイティブC/C++を使うプログラマがどうやって使うって言うの?
SIMDを直接叩くからNativeなんだが。
フェンス君は氏ね
1001 :
1001: