「投機的実行」の版間の差分

削除された内容 追加された内容
編集の要約なし
脆弱性(Spectre)の追記等
1行目:
'''投機的実行'''(とうきてきじっこう、{{Lang-en-short|speculative execution}})とは、[[コンピュータ]]に必要としないかもしれない仕事処理をさせることである。この性能[[最適化 (情報工学)|最適化]]技法は、[[命令パイプライン|パイプライン化]]された[[CPU|プロセッサ]]などのシステムで使われている<ref name="Lampson">[http://research.microsoft.com/en-us/um/people/blampson/slides/lazyandspeculative.ppt Lazy and Speculative Execution] [[バトラー・ランプソン|Butler Lampson]] [[マイクロソフトリサーチ|Microsoft Research]] OPODIS, Bordeaux, France 12 December 2006</ref><ref name="DivisionRaghavan1998">{{Cite book |author1=International Business Machines Corporation. Research Division |author2=Prabhakar Raghavan |author3=Hadas Schachnai |coauthors=Mira Yaniv |title=Dynamic schemes for speculative execution of code |url=http://books.google.com/books?id=eBgMGwAACAAJ |accessdate=2011-01-18 |year=1998 |publisher=IBM}}</ref>。
 
== 概要 ==
投機的実行は性能[[最適化 (情報工学)|最適化]]の一種である。その主たる考え方は、仕事処理確実に必要とされるかどうかを知る「前」に実行するというもので、それによってその仕事処理が必要だとわかった「後」でその仕事処理したするこきに生じる遅延を防ぐ。その仕事処理全く不要だったと判明した場合、その結果を単に無視する。目的は余分な[[計算資源]]が利用可能な場合に[[並行性]]を向上させることである。
 
以下のようなテクノロジーがこの考え方を採用している。
16行目:
 
== 積極的実行 ==
'''積極的実行'''({{En|eager execution}})は投機的実行の一種であり、条件分岐の両方の経路を実行し、実際に条件分岐命令を実行して通ることが判明した経路の結果のみを採用する。計算資源に制限がなく、あらゆる全ての分岐に対して積極的な投機的実行を行うことができれば、理論上完全な[[分岐予測]](必ず当たる「神託」に擬して {{En|''oracle execution''}}とも呼ばれる)と同等の性能を発揮する。ただし、必要な資源量は条件分岐の数に対し指数関数的に増大する<ref name="ŠilcRobič1999">{{Cite book |author1=Jurij Šilc |author2=Borut Robič |author3=Theo Ungerer |title=Processor architecture: from dataflow to superscalar and beyond |url=http://books.google.com/books?id=JEYKyfZ3yF0C&pg=PA148 |accessdate=2011-01-21 |year=1999 |publisher=Springer |isbn=9783540647980 |pages=148–150}}</ref>。
 
ミクロなレベルでの積極的実行としては、演算装置における桁上げ選択加算器(足し算の桁上げ(繰り上がり)は、高速化の手法はあるものの、最下位桁から伝搬する性質がある。そこで、桁上げありの場合となしの場合の両方を計算し、最後に(あるいは次のクロックで)桁上げの情報に応じてどちらかを選択する)といったものがある。
22行目:
== 遅延評価 ==
[[遅延評価]]は投機的ではない。投機的実行と言える[[先行評価]]({{En|eager evaluation}})を[[Haskell|Haskellプログラミング言語]]の実装に導入することは最近の研究上の話題のひとつである。Eager Haskellはそのような試みとして生まれた言語である。[[Glasgow Haskell Compiler]] (GHC) の最近のバージョンでは、選択を間違った場合にやり直すアボート機能をそなえた一種の投機的実行をサポートしており、「楽観的評価」と呼ばれている<ref name="Robert Ennals and Simon Peyton Jones">[http://research.microsoft.com/~simonpj/papers/optimistic/ Optimistic Evaluation: a fast evaluation strategy for non-strict programs]</ref>。
 
== 脆弱性 ==
2018年頃より、汎用的なプロセッサでの投機的実行において、セキュリティ上の脆弱性があることが判明している。例えば、投機的実行においてアクセス禁止されているメモリ空間にアクセスする[[Spectre]]などが知られている<ref>[https://www.fujitsu.com/jp/solutions/business-technology/security/secure/column/201802-1/ CPUの脆弱性「Spectre(スペクター)」と「Meltdown(メルトダウン)」] 富士通</ref>。
 
== 出典 ==