条件分岐
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2022/03/18 09:34 UTC 版)
GPUはシェーダープロセッサ(ストリームプロセッサ、ストリーミングプロセッサとも)と呼ばれる演算ユニットを多数持ち、複数のシェーダープロセッサをまとめてクラスタとしている。これらの演算器に命令を与えるインストラクション・ユニットはクラスタごとに1台しか無く、クラスタを構成するシェーダープロセッサはそれぞれ異なるデータを与えられ、そのデータに対して同じ命令内容を一度に実行する。このようなSIMD型データ処理は3次元演算やマルチメディア処理に効果を発揮する一方で、命令中に条件分岐による分岐が入るとオーバーヘッドがかさみ、途端に効率を落としてしまう。今日のCPUでは、このようなペナルティを最小限にするためにプリフェッチ/プリデコードや投機実行/レジスタ・リネーミングといった機能を備えているが、GPUでは備えていない(限定的な条件付きで投機的実行を行なえるものもある。GPUでの動的分岐はDirectX 9.0c世代以降でようやく現実的になった)。またPC向けのGPUではシェーダープロセッサごとに分岐するためのプログラムカウンターを持たないため、条件分岐の際は個別に異なる命令を発行するのではなく、実際に命令を実行するか否かを分けるためのマスクレジスタを使って分岐する手法が採用されている 。 また、シェーダープロセッサ間でデータをやりとりする場合、遠くのデータバスを経由することになり、それがボトルネックとなってしまう。この点に関しては、DirectX 10世代の統合型シェーダーアーキテクチャ以降のハードウェアに搭載されている、小容量だがプロセッサグループ内で共有することのできる高速なキャッシュメモリ(共有メモリ)を介することで、プロセッサグループ内でのデータ交換やメモリI/Oの効率を高めることができる 。 一般のアプリケーションで条件分岐が存在しないものは珍しく、こういった制約によってGPUはオフィススイートのようなアプリケーションの実行には不向きである。GPGPUの発展にはいかに効率を落とさず条件分岐を行なうかというのが1つの課題となっている。原理的にはシンプルなアルゴリズム構造を持ったプログラムによって、並列データ処理に最適化することがGPGPUの特長を最大限引き出すことにつながるといえる。
※この「条件分岐」の解説は、「GPGPU」の解説の一部です。
「条件分岐」を含む「GPGPU」の記事については、「GPGPU」の概要を参照ください。
条件分岐
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2021/12/04 03:18 UTC 版)
条件分岐は #ifTrue:ifFalse: セレクターを用いたメッセージ式として、条件式の結果の真偽値へのメッセージ送信の形で次のように記述する。 3 < 4 ifTrue: [ 5 ] ifFalse: [ 6 ]. Smalltalk では nil がオブジェクトである。これを利用した nil 専用の条件式も存在する。 object := nil.object ifNil: [ 5 ] ifNotNil: [ 6 ].object ifNotNilDo: [ :value | value inspect. ]. 条件分岐の制御において、他の言語でいうswitchに直接該当する文は存在しない。多態性を利用して分岐するか、次のように連想配列を利用して分岐するため不要である。 something: aNumber| switch |"速度が求められる場合は、初期化済みのDictionaryのオブジェクトをインスタンス変数やクラス変数にキャッシュする。"switch := Dictionarynewat: 1 put: [ #a ];at: 2 put: [ #b ];at: 3 put: [ #c ];yourself.^ ( switch at: aNumber ifAbsent: [ #z ] ) value. 但し一部の処理系では、次のようなswitchに類似した書き方ができるものも存在する。 something: aNumber^ aNumber caseOf:{[ 1 ]->[ #a ].[ 2 ]->[ #b ].[ 3 ]->[ #c ].}.
※この「条件分岐」の解説は、「Smalltalk」の解説の一部です。
「条件分岐」を含む「Smalltalk」の記事については、「Smalltalk」の概要を参照ください。
条件分岐
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2021/12/13 00:36 UTC 版)
マクロの仕組みを利用して条件分岐を行うことができる。=r コマンドはスタックから要素を 2 つポップし、それらの値が等しいときにレジスタ r に格納されているマクロを実行する。以下に示すのはスタックの先頭に 5 があるときに Equal と表示する例である: [[Equal]p]sm 5 =m その他にも、> (もともとの先頭が大きい場合にマクロ実行)、!> (大きくない場合)、< (小さい場合)、!< (小さくない場合)、!= (等しくない場合) がある。
※この「条件分岐」の解説は、「dc (UNIX)」の解説の一部です。
「条件分岐」を含む「dc (UNIX)」の記事については、「dc (UNIX)」の概要を参照ください。
Weblioに収録されているすべての辞書から条件分岐を検索する場合は、下記のリンクをクリックしてください。

- 条件分岐のページへのリンク