条件分岐とは? わかりやすく解説

Weblio 辞書 > 辞書・百科事典 > デジタル大辞泉 > 条件分岐の意味・解説 

じょうけん‐ぶんき〔デウケン‐〕【条件分岐】

読み方:じょうけんぶんき

conditional branchコンピュータープログラムで、ある条件式結果によって、次に行う処理を切り替えること。また、そのような命令文


条件分岐

読み方じょうけんぶんき
【英】conditional branch

条件分岐とは、プログラミングにおいて、条件文条件が真か偽かで次の実行定める文)によって、分岐するかどうか決定するプログラムでの命令のことである。ほとんどのプログラミング言語では、IFを使って条件分岐を行う。また、CPU命令セットインストラクションセット)では、CPU内部演算結果を示すフラグによって分岐制御が行われる。

プログラミングのほかの用語一覧
コーディング:  ゼロ除算  正規表現  正規表現エンジン  条件分岐  シリアライズ  シフト演算  スパゲッティコード

分岐命令

(条件分岐 から転送)

出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2024/09/05 00:49 UTC 版)

分岐命令(ぶんきめいれい、: branch instruction)は、プロセッサ命令のうちプログラム制御命令(Program control instruction)[1]の一種である。ジャンプ命令ともいう。条件ジャンプ命令と無条件ジャンプ命令があり、厳密には「分岐」するのは条件ジャンプであって無条件ジャンプは「分岐」と言えないかもしれないが、特に区別しないことが多い。サブルーチン呼出や戻りの命令も分岐命令の一種とすることもある。

一般的なプロセッサでは、機械語の命令列はアドレスの昇順に逐次実行されるが、分岐命令が実行されると次に実行される命令が切り替わる。高水準言語コンパイラは、条件文Goto文サブルーチン呼出などの制御構造から分岐命令を生成する。

たいていの分岐命令は[2]引数として少なくともターゲットアドレスを持つ。ターゲットアドレスは、分岐命令の実行によりプログラムカウンタに代入される。

命令パイプラインが深い一方で、先読みが浅いプロセッサでは、ジャンプによりパイプラインにバブルが発生しペナルティとなる設計にならざるをえないことがある。そのペナルティを軽減するため、分岐命令の直後を「遅延スロット」と称し、そこにある命令は分岐処理の直前に実行されるものとする、遅延分岐という方式がある。MIPSSHSPARCなど、初期のいわゆるRISCに採用例が多いが、1986年にNECから発表されたμPD77230、1988年にTIから発表されたTMS320C30、デジタルシグナルプロセッサにも(その前から)多い。ディレイスロット(にある命令)の数は、μPD77230の場合で 1 、TMS320C30の場合で 3 であった。大多数の(遅延スロットを採用している場合の)RISCのディレイスロットは 1 である。

パイプライン処理では命令のフェッチが重要であり、分岐予測が用いられることがある。分岐予測は失敗時のコストが大きいので、これを減らすために投機的実行などの技術が用いられる。

「汎用レジスタの内1つをプログラムカウンタにする」「全ての命令を条件実行可能とする」という、分岐命令の必要性を低減したり、パイプラインストールの可能性を低くする[3]工夫がある。ARMはこの両方を採用し、IA-64は後者をプリディケートで実現している(また前者は古くはPDP-8PDP-11などで使われDEC特許[4]でもあったため、技術的な理由でなく特許回避という観点が非採用の理由としてあった。一例としてTRONCHIP#特許)。前者は分岐命令のバリエーションを増やすことなく単純な命令セットで複雑な機能を実現できることが、DECの発明であってアーキテクトを魅了した[5]

しかし、命令セットは単純でも複雑な機能というのはRISC原理に反することもあり、RISCではARMなど採用例はあるが下火となった。RISC-Vでは命令のデコード・実行を複雑化させ、性能を低下させるとして前者・後者共に採用されなかった。ARMでも、64ビット化の際に両者とも廃止された(AArch64を参照)。

ただし、後者のごく部分的な実装である「条件実行命令を一部に用意する」のはRISCの観点にも適っており、AArch64では分岐の他に比較・選択といった命令に条件実行が残り、RISC-VのZicond拡張や、Pentium Pro以降のx86P6マイクロアーキテクチャ、俗に686)にて、CISCだからというよりは内部RISCアーキテクチャでのソフトウェア的な性能向上のために実装されたCMOV命令なども同様である。

脚注・出典

  1. ^ P.HAYES, JOHN (1978,1979). Computer Architecture and Organization. pp. 169. ISBN 0-07-027363-4 
  2. ^ 命令セットアーキテクチャにも依り、例えばスタックマシンにおいてスタックのトップを暗黙の引数とするため引数を持たない、という設計もあるかもしれない。またサブルーチンからの戻りを分岐命令とする場合、多くの設計で特定のレジスタかコールスタックのトップが暗黙の引数であり、命令自体は引数を持たない。
  3. ^ 後者はともかく、前者はPCへの任意の代入があり得ることから、パイプラインストールのペナルティは悪化しうる。
  4. ^ w11: PDP-11/70 CPU and SoC の DEC Patents(2024年9月4日閲覧)のページで PC as general register とある特許・他。
  5. ^ うんちく:アドレッシングモードの色々2024年9月4日閲覧「3. さらなる一般化:汎用レジスタをPCにしたら?」

関連項目


条件分岐

出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2022/03/18 09:34 UTC 版)

GPGPU」の記事における「条件分岐」の解説

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 版)

Smalltalk」の記事における「条件分岐」の解説

条件分岐は #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 版)

dc (UNIX)」の記事における「条件分岐」の解説

マクロ仕組み利用して条件分岐を行うことができる。=r コマンドスタックから要素2 つポップし、それらの値が等しいときにレジスタ r に格納されているマクロ実行する。以下に示すのはスタック先頭に 5 があるときに Equal表示する例である: [[Equal]p]sm 5 =m その他にも、> (もともとの先頭大き場合マクロ実行)、!> (大きくない場合)、< (小さ場合)、!< (小さくない場合)、!= (等しくない場合) がある。

※この「条件分岐」の解説は、「dc (UNIX)」の解説の一部です。
「条件分岐」を含む「dc (UNIX)」の記事については、「dc (UNIX)」の概要を参照ください。

ウィキペディア小見出し辞書の「条件分岐」の項目はプログラムで機械的に意味や本文を生成しているため、不適切な項目が含まれていることもあります。ご了承くださいませ。 お問い合わせ


英和和英テキスト翻訳>> Weblio翻訳
英語⇒日本語日本語⇒英語
  

辞書ショートカット

すべての辞書の索引

「条件分岐」の関連用語


2
投機的実行 デジタル大辞泉
58% |||||


4
決定木 デジタル大辞泉
58% |||||




8
NSチャート デジタル大辞泉
50% |||||

9
デッド‐コード デジタル大辞泉
50% |||||


条件分岐のお隣キーワード
検索ランキング

   

英語⇒日本語
日本語⇒英語
   



条件分岐のページの著作権
Weblio 辞書 情報提供元は 参加元一覧 にて確認できます。

   
デジタル大辞泉デジタル大辞泉
(C)Shogakukan Inc.
株式会社 小学館
IT用語辞典バイナリIT用語辞典バイナリ
Copyright © 2005-2024 Weblio 辞書 IT用語辞典バイナリさくいん。 この記事は、IT用語辞典バイナリ条件分岐の記事を利用しております。
ウィキペディアウィキペディア
All text is available under the terms of the GNU Free Documentation License.
この記事は、ウィキペディアの分岐命令 (改訂履歴)の記事を複製、再配布したものにあたり、GNU Free Documentation Licenseというライセンスの下で提供されています。 Weblio辞書に掲載されているウィキペディアの記事も、全てGNU Free Documentation Licenseの元に提供されております。
ウィキペディアウィキペディア
Text is available under GNU Free Documentation License (GFDL).
Weblio辞書に掲載されている「ウィキペディア小見出し辞書」の記事は、WikipediaのGPGPU (改訂履歴)、Smalltalk (改訂履歴)、dc (UNIX) (改訂履歴)の記事を複製、再配布したものにあたり、GNU Free Documentation Licenseというライセンスの下で提供されています。

©2024 GRAS Group, Inc.RSS