図面 (/)

技術 マルチスレッディングを支援するための演算ユニット、それを含むプロセッサ及びプロセッサの動作方法

出願人 三星電子株式会社
発明者 趙淵坤柳秀晶
出願日 2014年12月1日 (6年0ヶ月経過) 出願番号 2014-243216
公開日 2015年7月2日 (5年5ヶ月経過) 公開番号 2015-122063
状態 特許登録済
技術分野 先行制御
主要キーワード メイン制御ユニット 衝突感知 演算ユニット内 感知結果 マルチプログラミング バスマネージャー 現在状態情報 リソース衝突
関連する未来課題
重要な関連分野

この項目の情報は公開日時点(2015年7月2日)のものです。
また、この項目は機械的に抽出しているため、正しく解析できていない場合があります

図面 (8)

課題

マルチスレッディング支援する演算ユニット、それを含むプロセッサ及びプロセッサの動作方法を提供する。

解決手段

演算ユニット100は、互いに異なるスレッドに対するオペコード及びオペランドをそれぞれ入力される複数の入力ポート110と、入力されたオペランドを用いて演算を行う複数の演算子120と、各オペコードに基づいて、受信されたオペランドのうち1つを使って特定の演算を行う演算子120を、複数の演算子120のうちから選択する演算子選択部130と、各スレッドの演算遂行結果を出力する複数の出力ポート140と、を含む。

概要

背景

コンピュータ分野の技術の発達につれて、1つの作業だけではなく、多数の作業を同時に実行しなければならない場合が頻繁に発生する。このように同時に多くの作業を処理することを、マルチプロセッシング(multiprocessing)、マルチタスキング(multitasking)、マルチプログラミング(multiprogramming)、及び/またはマルチスレッディング(multithreading)と言う。

このようなマルチプロセッシングは、マルチタスキング、多重化(Multiplexing)などの方法で提供されるが、前者の場合、多数の作業を多数のプロセス(または、スレッド)に分けて処理することを意味し、後者の場合、1つのプロセス内で多数の作業を処理することを意味する。

例えば、マルチタスキングは、多くの作業(すなわち、タスク)を並行して処理するものであって、オペレーティングシステム(OS)は、マルチタスキングのためにプロセスを多数個使って実行させるか(マルチプロセス)、スレッドを多数個実行させる技法マルチスレッド)を使う。

この際、マルチプロセスとマルチスレッドは、両方とも複数の流れが同時に進行するという共通点を有している。しかし、マルチプロセスにおいて、各プロセスは、独立して実行され、それぞれ別個メモリを占めているのとは異なって、マルチスレッドでは、プロセス内のメモリを共有することができる。また、プロセス間転換速度よりもスレッド間の転換速度が速く、スレッド間のスケジューリングも、プロセス間のスケジューリングよりも相対的に速くなされる。

概要

マルチスレッディングを支援する演算ユニット、それを含むプロセッサ及びプロセッサの動作方法を提供する。演算ユニット100は、互いに異なるスレッドに対するオペコード及びオペランドをそれぞれ入力される複数の入力ポート110と、入力されたオペランドを用いて演算を行う複数の演算子120と、各オペコードに基づいて、受信されたオペランドのうち1つを使って特定の演算を行う演算子120を、複数の演算子120のうちから選択する演算子選択部130と、各スレッドの演算遂行結果を出力する複数の出力ポート140と、を含む。

目的

本発明は、マルチスレッディングを支援するための演算ユニット、それを含むプロセッサ及びプロセッサの動作方法を提供する

効果

実績

技術文献被引用数
0件
牽制数
0件

この技術が所属する分野

(分野番号表示ON)※整理標準化データをもとに当社作成

ライセンス契約や譲渡などの可能性がある特許掲載中! 開放特許随時追加・更新中 詳しくはこちら

請求項1

マルチスレッディング支援するための演算ユニットであって、互いに異なるスレッドに対するオペコード及びオペランドをそれぞれ入力される複数の入力ポートと、前記入力されたオペランドを用いて演算を行う複数の演算子と、各オペコードに基づいて、受信されたオペランドのうち1つを使って特定の演算を行う演算子を、前記複数の演算子のうちから選択する演算子選択部と、各スレッドの演算遂行結果を出力する複数の出力ポートと、を含む、演算ユニット。

請求項2

前記複数の出力ポートそれぞれは、互いに異なるスレッドに対する演算遂行結果を出力する、請求項1に記載の演算ユニット。

請求項3

前記複数の演算子は、データパス上に各スレッドに割り当てられて演算遂行結果を保存する複数のレジスタを含む、請求項1または2に記載の演算ユニット。

請求項4

前記複数の演算子それぞれは、前記複数の演算子のうち、他の演算子が行う演算とは異なる特定の演算を行う、請求項1乃至3いずれか一項に記載の演算ユニット。

請求項5

前記複数の演算子のうち少なくとも2つの演算子は、互いに同じ演算を行う、請求項1乃至3いずれか一項に記載の演算ユニット。

請求項6

前記少なくとも2つの演算子は、前記演算ユニット内で遂行頻度の高い演算を行う、請求項5に記載の演算ユニット。

請求項7

前記少なくとも2つの演算子は、自身の現在状態を表わす信号を生成し、前記演算子選択部に伝送する、請求項5に記載の演算ユニット。

請求項8

複数のスレッドを同時に処理する少なくとも1つの演算ユニットを含むプロセッシング部と、前記複数のスレッドのうち少なくとも2つのスレッドが、同じ演算ユニット内で同じ演算を行うために同時に試みているか否かを判断して、リソース衝突感知するリソース衝突感知部と、リソースの衝突が感知されれば、設定された基準によって、前記衝突された少なくとも2つのスレッド間処理順序を決定するリソーススケジューラと、を含む、プロセッサ

請求項9

前記リソース衝突感知部は、前記少なくとも1つの演算ユニットについての演算子情報を保存するリソース情報保存部と、前記複数のスレッドのオペコードを各演算ユニット別に比較するオペコード比較部と、前記オペコード比較部の比較の結果及び前記リソース情報保存部に保存された演算子情報に基づいてリソースの衝突有無を判断するリソース衝突有無判断部と、を含む、請求項8に記載のプロセッサ。

請求項10

前記演算子情報は、各演算ユニットに含まれている演算子の種類、個数及び各演算子の状態情報のうち少なくとも1つを含む、請求項9に記載のプロセッサ。

請求項11

前記リソーススケジューラは、前記衝突された少なくとも2つのスレッドのうち、処理順序の低いスレッドに対するストール信号を生成する、請求項8乃至10いずれか一項に記載のプロセッサ。

請求項12

前記プロセッサは、さらに、前記リソース衝突感知部から受信されたリソース衝突感知結果を保存するキューを含む、請求項8乃至11いずれか一項に記載のプロセッサ。

請求項13

前記プロセッサは、さらに、前記複数のスレッドのうち、一部に含まれた制御文の実行によって、前記キューに保存されたリソース衝突感知結果が有効ではない場合、前記キューをフラッシュするフラッシュ部、を含む、請求項12に記載のプロセッサ。

請求項14

複数のスレッドを同時に処理する少なくとも1つの演算ユニットを含むプロセッサの動作方法であって、少なくとも2つのスレッドが、同じ演算ユニット内で同じ演算を行うために同時に試みているか否かを判断して、リソースの衝突を感知する段階と、リソースの衝突が感知されれば、既定の基準によって、前記衝突された少なくとも2つのスレッド間の処理順序を決定する段階と、を含む、方法。

請求項15

前記感知する段階は、前記複数のスレッドのオペコードを各演算ユニット別に比較する段階と、比較の結果及び保存された演算子情報に基づいてリソースの衝突有無を判断する段階と、を含む、請求項14に記載の方法。

請求項16

前記演算子情報は、各演算ユニットに含まれている演算子の種類、個数及び各演算子の状態情報のうち少なくとも1つを含む、請求項15に記載の方法。

請求項17

前記方法は、さらに、前記衝突された少なくとも2つのスレッドのうち、処理順序の低いスレッドをストールする段階を含む、請求項14乃至16いずれか一項に記載の方法。

請求項18

前記方法は、さらに、リソース衝突感知結果をキューに保存する段階を含む、請求項14乃至17いずれか一項に記載のプロセッサの動作方法。

請求項19

前記複数のスレッドのうち、一部に含まれた制御文の実行によって、前記キューに保存されたリソース衝突感知結果が有効ではない場合、前記キューをフラッシュする段階をさらに含む、請求項18に記載のプロセッサの動作方法。

請求項20

第1演算を行い、第1現在状態信号を生成かつ伝送する第1演算子と、第2演算を行い、第2現在状態信号を生成かつ伝送する第2演算子と、前記第1現在状態信号、前記第2現在状態信号、及び、第1スレッドの第1オペランドを利用する第1オペコードに基づいて、前記第1演算子及び前記第2演算子のうち1つを選択し、かつ、前記第1現在状態信号、前記第2現在状態信号、及び、第2スレッドの第2オペランドを利用する第2オペコードに基づいて、前記第1演算子及び前記第2演算子のうち1つを選択する、演算子選択部と、を含む演算ユニットと、前記第1スレッド及び前記第2スレッドに対して同じ演算子が選択されれば、リソース衝突を感知するリソース衝突感知部と、前記第1スレッド及び前記第2スレッドのうち、優先順位の低いスレッドをストールして、前記第1スレッド及び前記第2スレッドの処理順序を決定するリソーススケジューラと、を含む、プロセッサ。

請求項21

前記リソース衝突感知部は、演算子タイプ、演算子の数、及び、各演算子の状態情報のうち少なくとも1つを含む演算ユニットについての演算子情報を保存するリソース情報保存部と、前記第1オペコード及び前記第2オペコードを比較するオペコード比較部と、オペコードの比較の結果及び前記演算子情報に基づいてリソースの衝突有無を判断するリソース衝突判断部と、を含む、請求項20に記載のプロセッサ。

請求項22

前記リソース衝突感知部から受信されたリソース衝突感知結果を保存するキューと、前記第1スレッド及び前記第2スレッドのうち少なくとも1つに含まれた制御文の実行によって、前記キューに保存されたリソース衝突感知結果が有効ではない場合、キューをフラッシュするフラッシュ部と、をさらに含む、請求項20または21に記載のプロセッサ。

技術分野

0001

本発明は、マルチスレッディングプロセッサに関する。特には、マルチスレッディングを支援するための演算ユニット、それを含むプロセッサ及びプロセッサの動作方法に関する。

背景技術

0002

コンピュータ分野の技術の発達につれて、1つの作業だけではなく、多数の作業を同時に実行しなければならない場合が頻繁に発生する。このように同時に多くの作業を処理することを、マルチプロセッシング(multiprocessing)、マルチタスキング(multitasking)、マルチプログラミング(multiprogramming)、及び/またはマルチスレッディング(multithreading)と言う。

0003

このようなマルチプロセッシングは、マルチタスキング、多重化(Multiplexing)などの方法で提供されるが、前者の場合、多数の作業を多数のプロセス(または、スレッド)に分けて処理することを意味し、後者の場合、1つのプロセス内で多数の作業を処理することを意味する。

0004

例えば、マルチタスキングは、多くの作業(すなわち、タスク)を並行して処理するものであって、オペレーティングシステム(OS)は、マルチタスキングのためにプロセスを多数個使って実行させるか(マルチプロセス)、スレッドを多数個実行させる技法マルチスレッド)を使う。

0005

この際、マルチプロセスとマルチスレッドは、両方とも複数の流れが同時に進行するという共通点を有している。しかし、マルチプロセスにおいて、各プロセスは、独立して実行され、それぞれ別個メモリを占めているのとは異なって、マルチスレッドでは、プロセス内のメモリを共有することができる。また、プロセス間転換速度よりもスレッド間の転換速度が速く、スレッド間のスケジューリングも、プロセス間のスケジューリングよりも相対的に速くなされる。

発明が解決しようとする課題

0006

本発明は、マルチスレッディングを支援するための演算ユニット、それを含むプロセッサ及びプロセッサの動作方法を提供する。

課題を解決するための手段

0007

本発明の一態様によるマルチスレッディングを支援するための演算ユニットは、互いに異なるスレッドに対するオペコード及びオペランドをそれぞれ入力される複数の入力ポートと、前記入力されたオペランドを用いて演算を行う複数の演算子と、各オペコードに基づいて、受信されたオペランドのうち1つを使って特定の演算を行う演算子を、前記複数の演算子のうちから選択する演算子選択部と、各スレッドの演算遂行結果を出力する複数の出力ポートと、を含みうる。

0008

前記複数の出力ポートそれぞれは、互いに異なるスレッドに対する演算遂行結果を出力することができる。

0009

前記複数の演算子は、データパス上に各スレッドに割り当てられて演算遂行結果を保存する複数のレジスタを含みうる。

0010

前記複数の演算子それぞれは、前記複数の演算子のうち、他の演算子が行う演算とは異なる特定の演算を行うことができる。

0011

前記複数の演算子のうち少なくとも2つの演算子は、互いに同じ演算を行うことができる。

0012

前記少なくとも2つの演算子は、前記演算ユニット内で遂行頻度の高い演算を行うことができる。

0013

前記少なくとも2つの演算子は、自身の現在状態を表わす信号を生成して、前記演算子選択部に伝送しうる。

0014

本発明の他の態様によるプロセッサは、複数のスレッドを同時に処理する少なくとも1つの演算ユニットを含むプロセッシング部と、前記複数のスレッドのうち少なくとも2つのスレッドが、同じ演算ユニット内で同じ演算を行うために同時に試みているか否かを判断して、リソース衝突感知するリソース衝突感知部と、リソースの衝突が感知されれば、設定された基準によって、前記衝突された少なくとも2つのスレッド間の処理順序を決定するリソーススケジューラと、を含みうる。

0015

前記リソース衝突感知部は、前記少なくとも1つの演算ユニットについての演算子情報を保存するリソース情報保存部と、前記複数のスレッドのオペコードを各演算ユニット別に比較するオペコード比較部と、前記オペコード比較部の比較の結果及び前記リソース情報保存部に保存された演算子情報に基づいてリソースの衝突有無を判断するリソース衝突有無判断部と、を含みうる。

0016

前記演算子情報は、各演算ユニットに含まれている演算子の種類、個数及び各演算子の状態情報のうち少なくとも1つを含みうる。

0017

前記リソーススケジューラは、前記衝突された少なくとも2つのスレッドのうち、処理順序の低いスレッドに対するストール信号を生成することができる。

0018

プロセッサは、前記リソース衝突感知部から受信されたリソース衝突感知結果を保存するキューをさらに含みうる。

0019

プロセッサは、前記複数のスレッドのうち、一部に含まれた制御文の実行によって、前記キューに保存されたリソース衝突感知結果が有効ではない場合、前記キューをフラッシュするフラッシュ部をさらに含みうる。

0020

本発明のさらに他の態様による複数のスレッドを同時に処理する少なくとも1つの演算ユニットを含むプロセッサの動作方法は、少なくとも2つのスレッドが、同じ演算ユニット内で同じ演算を行うために同時に試みているか否かを判断して、リソースの衝突を感知する段階と、リソースの衝突が感知されれば、既定の基準によって、前記衝突された少なくとも2つのスレッド間の処理順序を決定する段階と、を含みうる。

0021

前記感知する段階は、前記複数のスレッドのオペコードを各演算ユニット別に比較する段階と、比較の結果及び保存された演算子情報に基づいてリソースの衝突有無を判断する段階と、を含みうる。

0022

前記演算子情報は、各演算ユニットに含まれている演算子の種類、個数及び各演算子の状態情報のうち少なくとも1つを含みうる。

0023

プロセッサの動作方法は、前記衝突された少なくとも2つのスレッドのうち、処理順序の低いスレッドをストールする段階をさらに含みうる。

0024

プロセッサの動作方法は、リソース衝突感知結果をキューに保存する段階をさらに含みうる。

0025

プロセッサの動作方法は、前記複数のスレッドのうち、一部に含まれた制御文の実行によって、前記キューに保存されたリソース衝突感知結果が有効ではない場合、前記キューをフラッシュする段階をさらに含みうる。

0026

本発明のさらに他の態様によるプロセッサは、第1演算を行い、第1現在状態信号を生成及び伝送する第1演算子と、第2演算を行い、第2現在状態信号を生成及び伝送する第2演算子と、前記第1現在状態信号、前記第2現在状態信号、及び第1スレッドの第1オペランドを利用する第1オペコードに基づいて、前記第1演算子及び前記第2演算子のうち1つを選択し、前記第1現在状態信号、前記第2現在状態信号、及び第2スレッドの第2オペランドを利用する第2オペコードに基づいて、前記第1演算子及び前記第2演算子のうち1つを選択する演算子選択部を含む演算ユニットと、前記第1スレッド及び前記第2スレッドに対して同じ演算子が選択されれば、リソース衝突を感知するリソース衝突感知部と、前記第1スレッド及び前記第2スレッドのうち、優先順位の低いスレッドをストールして、前記第1スレッド及び前記第2スレッドの処理順序を決定するリソーススケジューラと、を含みうる。

0027

前記リソース衝突感知部は、演算子タイプ、演算子の数、及び各演算子の状態情報のうち少なくとも1つを含む演算ユニットについての演算子情報を保存するリソース情報保存部と、前記第1オペコード及び前記第2オペコードを比較するオペコード比較部と、オペコードの比較の結果及び前記演算子情報に基づいてリソースの衝突有無を判断するリソース衝突判断部と、を含みうる。

0028

プロセッサは、前記リソース衝突感知部から受信されたリソース衝突感知結果を保存するキューと、前記第1スレッド及び前記第2スレッドのうち少なくとも1つに含まれた制御文の実行によって、前記キューに保存されたリソース衝突感知結果が有効ではない場合、キューをフラッシュするフラッシュ部と、をさらに含みうる。

図面の簡単な説明

0029

本発明の一実施形態によるマルチスレッディングを支援するための演算ユニットの概略的な構成図である。
本発明の一実施形態によるマルチスレッディングを支援するための演算ユニットの例示図である。
本発明の一実施形態によるプロセッサの構成図である。
本発明の一実施形態による図3のリソース衝突感知部320の詳細構成図である。
本発明の他の実施形態によるプロセッサの構成図である。
本発明の一実施形態によるプロセッサ500の動作方法を示す図面である。
本発明の一実施形態による図6のリソースの衝突を感知する過程(610)の詳細フローチャートである。

実施例

0030

以下、添付図面を参照して、本発明の一実施形態を詳細に説明する。本発明を説明するにあたり、関連した公知機能または構成についての具体的な説明が、本発明の要旨を不明にするおそれがあると判断される場合には、その詳細な説明を省略する。また、後述される用語は、本発明での機能を考慮して定義された用語であって、これは、ユーザ、運用者の意図または慣例などによって変わりうる。したがって、その定義は、本明細書の全般に亘った内容に基づいて下されなければならない。

0031

取り立てて説明がない限り、図面及び詳細な説明の全般に亘って、同じ参照符号は、同じ構成、特徴、構造を参照するものと理解される。

0032

一実施形態によれば、演算ユニット(functional unit)は、実行ユニット(execution unit)と呼称され、中央処理装置(central processing unit:CPU)またはプロセッサの一部になりうる。また、演算ユニットは、CPUで実行中であるか、実行準備中であるコンピュータプログラムによって要求される動作(operations)及び計算(calculations)を行うことができる。演算ユニットは、CPUメイン制御ユニット区分され、演算子選択部と呼称されてよく、内部制御シーケンスユニット(internal control sequence unit)を含みうる。演算ユニットは、1つ以上のレジスタ及び内部装置(例えば、サブ算術論理ユニット(sub−Arithmetic Logic Unit)、浮動小数点ユニット(floation−point unit)など)を含みうる。

0033

一実施形態によれば、CPUは、スカラーまたはスーパースカラー設計で配列される時、多数の並列機能ユニットを含みうる。そして、CPUの機能ユニットは、パイプラインになることもあり、1つの機能ユニットは、メモリインターフェースを管理するためにバスマネージャーとして使われ、残りの機能ユニットは、CPUによって実行されるコンピュータプログラムのための計算を行うように配置されることもある。

0034

図1は、本発明の一実施形態によるマルチスレッディングを支援するための演算ユニットの構成図である。図1を参照すれば、演算ユニット(Functional Unit;FU)100は、入力ポート110a〜110c、演算子120a〜120c、演算子選択部130及び出力ポート140a〜140cを含みうる。

0035

入力ポート110a〜110cは、オペコード及びオペランドをスレッド別に入力され得る。例えば、入力ポート#1(110a)は、スレッド1に対するオペコード及びオペランドを、入力ポート#2(110b)は、スレッド2に対するオペコード及びオペランドを、入力ポート#n(110c)は、スレッドnに対するオペコード及びオペランドを入力され得る。この際、入力ポートの個数は、同時に処理しようとするスレッドの個数と同じでもあってもよいが、これに限定されるものではない。

0036

演算子120a〜120cは、オペランド(operand)に対する所定の演算を行うことができる。演算子120a〜120cは、加算器乗算器除算器比較器などとして具現され得るが、これらに限定されるものではない。

0037

一実施形態によれば、各演算子120a〜120cは、マルチスレッディングのために、各演算子120a〜120cのデータパス上に各スレッドに割り当てられて、演算結果を保存するレジスタ#1、レジスタ#nを含みうる。この際、レジスタ#1は、スレッド1に割り当てられ、レジスタ#nは、スレッドnに割り当てられる。

0038

演算子選択部130は、各入力ポート110a〜110cを通じて入力されたオペコードに基づいて、各オペランドに対する演算を行う演算子を選択することができる。例えば、演算子120aは加算器、演算子120bは乗算器、演算子120cは比較器であると仮定する。この際、スレッド1のオペコードが加算命令であり、スレッド2のオペコードが乗算命令である場合、演算子選択部130は、スレッド1のオペランドを処理する演算子として演算子120aを、スレッド2のオペランドを処理する演算子として演算子120bを選択することができる。この場合、演算子120aは、スレッド1のオペランドに対して加算演算を行い、それと同時に、演算子120bは、スレッド2のオペランドに対して乗算演算を行う。

0039

出力ポート140a〜140cは、演算遂行結果をスレッド別に出力することができる。例えば、出力ポート#1(140a)はスレッド1に対する演算遂行結果を、出力ポート#2(140b)はスレッド2に対する演算遂行結果を、出力ポート#n(140c)はスレッドnに対する演算遂行結果を出力することができる。この際、出力ポートの個数は、同時に処理しようとするスレッドの個数と同じであってもよいが、これに限定されるものではない。

0040

上述のように、演算ユニット100は、複数のスレッドを同時に処理することが可能なので、スレッドレベル並列性(Thread Level Parallelism;TLP)を極大化させることが可能である。

0041

一方、一実施形態によれば、演算子120a〜120cは、互いに異なる演算を行うように具現され得る。この場合、演算ユニット100は、複数のスレッドに対する互いに異なるオペコードを同時に処理することが可能である。

0042

しかし、演算子120a〜120cが互いに異なる演算を行い、かつ、2つ以上のスレッドが同じ演算ユニット100を用いて同じ演算を行う場合は、リソース衝突(resource conflict)が発生して、優先順位の低いスレッドがストール(stall)されて、システムの性能低下を引き起こすことがある。

0043

一実施形態によれば、このような問題を解決するために、演算子120a〜120cのうち一部は、互いに同じ演算を行うように具現され得る。特に、演算ユニット100内で遂行頻度の高い演算をリソース衝突なしに行うために、使用頻度の高い演算子を演算ユニット100に複数個配置することができる。例えば、よく行われる動作を決定するために、多様なスレッドの動作をあらかじめプロファイリングし、その結果に基づいて、よく使われる演算子を演算ユニット100に複数個配置することができる。例えば、プロファイリングの結果、加算演算をよく使うスレッドによってリソース衝突がよく発生して、システムの性能低下が発生したならば、演算ユニット100に加算器をさらに1つ追加し、各加算器は、自身の現在状態情報、すなわち、現在使用可能であるか否かを知らせる信号を生成して、演算子選択部130に伝送することによって、演算子選択部130が適切な選択を行うことを可能にする。

0044

特に、一実施形態によれば、同じ演算を行うように具現された一部演算子それぞれは、自身の現在状態を表わす信号を生成して、演算子選択部130に出力することができる。現在状態を表わす信号は、各演算子が使用可能か否かを知らせる信号を意味する。例えば、一部演算子それぞれは、自身が現在演算を行っていて、他のスレッドに対する演算を行えない時、ビジー(busy)信号を生成して、演算子選択部130に伝送しうる。この場合、演算子選択部130は、ビジー信号を送信した演算子を除いた残りの演算子のうちから演算を行う演算子を選択する。

0045

また、ビジー信号を演算子選択部130に送信した演算子は、ビジー信号送信当時に遂行中であった演算が完了すれば、他のスレッドが当該演算子を利用できるように、完了信号を生成して出力することができる。

0046

図2は、本発明の一実施形態によるマルチスレッディングを支援するための演算ユニットの例示図である。図2の演算ユニット200は、2つのスレッドの同時処理を支援するための演算ユニットの例であって、2つの演算子(加算器及び比較器)を含む。図2は、説明の便宜上、2つの演算子を含むものと図示しただけのことであり、発明の用途及び性能によって多様な演算子を含むことも可能である。

0047

図2を参照すれば、演算ユニット200は、スレッド1及びスレッド2に対するオペランド及びオペコードを入力される。演算ユニット200は、各オペコードに基づいて、各スレッドのオペランドに対する演算を行う演算子をスレッド別に選択し、スレッド別に選択した演算子を用いて、各スレッドのオペランドに対する演算を行う。例えば、スレッド1のオペコードが加算命令であり、スレッド2のオペコードが比較命令である場合、演算ユニット200は、加算器を用いてスレッド1のオペランドに対して加算演算を行い、それと同時に、比較器を用いてスレッド2のオペランドに対して比較演算を行う。

0048

各演算子のデータパス上には、各スレッドのためのレジスタが含まれる。例えば、レジスタ#1は、スレッド1のためのレジスタであり、レジスタ#2は、スレッド2のためのレジスタである。すなわち、スレッド1のオペランドに対する演算結果は、レジスタ#1に保存され、スレッド2のオペランドに対する演算結果は、レジスタ#2に保存される。

0049

次いで、演算ユニット200は、2つの出力端子を通じて演算遂行結果を各スレッド別に出力する。

0050

図3は、本発明の一実施形態によるプロセッサの構成図である。図3を参照すれば、プロセッサ300は、プロセッシング部310、リソース衝突感知部320及びリソーススケジューラ330を含みうる。

0051

プロセッシング部310は、複数のスレッドを同時に処理することができる。このために、プロセッシング部310は、複数のスレッドに対する複数の演算を同時に行うことができる1つ以上の演算ユニットFU#0〜FU#nを含みうる。この際、複数のスレッドに対する複数の演算を同時に行うことができる演算ユニットは、図1を参照して説明した演算ユニットと同一なので、その詳細な説明は省略する。

0052

リソース衝突感知部320は、2つ以上のスレッドが同時に同じ演算ユニット内で同じ演算を行うか否かを検査して、リソースの衝突を感知することができる。例えば、スレッド1は、FU#0内で加算演算を行い、スレッド2は、FU#0内で乗算演算を行うならば、FU#0は、加算演算及び乗算演算を同時に行うことが可能なので、リソース衝突が発生しない。しかし、スレッド1及びスレッド2が、FU#1内で同じ演算である比較演算を行うならば、比較演算を行う比較器がFU#1内に1つだけ存在する場合、リソース衝突が発生する。この場合、リソース衝突感知部320は、FU#1のリソース衝突を感知することができる。

0053

リソース衝突感知部320の詳しい説明は、図4を参照して後述する。

0054

リソーススケジューラ330は、既定の基準によって衝突されたスレッド間に処理順序を決定することができる。例えば、リソーススケジューラ330は、各スレッドでキャッシュミス(cache miss)が発生したか否かを直接判断するか、外部からこれに関する情報を受信して、これにより、スレッド間に処理順序を決定することができる。他の例を挙げれば、リソーススケジューラ330は、ユーザまたはシステムによって設定された優先順位によって、各スレッドの処理順序を決定することもできる。しかし、前述した例に限定されるものではない。

0055

一方、キャッシュミスが発生せず、外部情報も提供されず、衝突されたスレッド間にスレッド優先順位が存在しない場合、リソーススケジューラ330は、スレッドの特定属性に基づいて処理順序を決定することができる。例えば、特定属性は、スレッドに対する処理時間、保存時間、スレッドが要請したメモリ情報呼び出す時間の量、演算複雑性及びサイクルのような値を含みうる。そして、このような値は、衝突されたスレッドと関連したあらゆる情報を考慮する加重決定アルゴリズム(weighted decisionalgorithm)に使われる。

0056

リソーススケジューラ330は、決定された処理順序に基づいて処理順序の低いスレッドのデータパス(datapath)をストール(stall)させるように、ストール信号を生成することができる。また、リソーススケジューラ330は、ストールされたスレッドのリソース使用権許可されれば、グラント(grant)信号を生成することができる。

0057

プロセッシング部310は、ストール信号を受信すれば、処理順序の低いスレッドのデータパスをストールさせ、以後、ストールされたスレッドのリソース使用権が許可されて発生したグラント信号を受信すれば、ストールが解かれて、スレッドの処理を再開する。

0058

図4は、本発明の一実施形態による図3のリソース衝突感知部320の詳細構成図である。図4を参照すれば、リソース衝突感知部320は、リソース情報保存部410、オペコード比較部420及びリソース衝突有無判断部430を含みうる。

0059

リソース情報保存部410は、スレッド情報、演算ユニット情報及び演算子情報などをリソーステーブルに保存することができる。この際、スレッド情報は、同時に処理しようとするスレッドのID、現在処理中であるスレッドのIDなどを含みうる。演算ユニット情報は、プロセッシング部310に含まれている演算ユニットの個数、演算ユニットIDなどを含みうる。演算子情報は、各演算ユニットに含まれている演算子の種類、個数、演算子の状態情報などを含みうる。この際、演算子の状態情報は、各演算子が現在演算を行っているか否かに関する情報をいう。

0060

一方、演算ユニット100に含まれた演算子120a〜120cのうち、一部が同じオペコードを処理するように具現された場合であって、ビジー信号を演算子選択部130に送信した演算子がビジー信号送信当時処理中であったオペコードの処理が完了して、完了信号を送信すれば、リソース情報保存部410は、これを受信して、当該演算ユニットの演算子の状態情報を更新することができる。この際、演算子テーブルの運用は、多様な方法によって可能である。

0061

オペコード比較部420は、各スレッドのオペコードを演算ユニット別に比較することができる。例えば、各スレッドの命令語解釈(decoding)すれば、各演算ユニット別に行うようとする演算の種類をオペコードを通じて分かる。この際、オペコード比較部420は、演算ユニット別に各スレッドのオペコードを相互比較することによって、各演算ユニットが同時に同じ演算を行うか否かを判断することができる。

0062

リソース衝突有無判断部430は、リソース情報保存部410に保存された情報及びオペコード比較部420で比較した結果に基づいて、リソースの衝突有無を判断することができる。例えば、スレッド1及びスレッド2が、同時にFU#0で加算演算を行うものと仮定する。この場合、リソース情報保存部410に保存されたFU#0の演算子情報に照らして、FU#0に2つの加算器が含まれている場合、FU#0は、2つの加算器を同時に使うことができるので、リソースの衝突が発生しない。一方、FU#0に1つの加算器だけが含まれている場合は、FU#0は1つの加算器だけしか使えず、2つの加算演算を同時にできないので、スレッド1及びスレッド2のオペコードを同時に処理することができない。この場合、リソース衝突有無判断部430は、FU#0でリソース衝突が発生すると判断することができる。

0063

一方、プロセッサ300は、パイプライン技法を適用する。一般的に、プロセッサパイプラインは、命令語の取出し(fetch)段階、命令語解釈段階、命令語実行(execute)段階、結果保存(write back)段階を含む。

0064

一実施形態によれば、リソース衝突感知部320は、プロセッサパイプラインのうち、命令語解釈段階で各スレッドのオペコードを比較して、リソースの衝突有無を感知することができる。

0065

図5は、本発明の他の実施形態によるプロセッサの構成図である。図5を参照すれば、プロセッサ500は、プロセッシング部310、リソース衝突感知部320及びリソーススケジューラ330に追加して、キュー510及びフラッシュ部520をさらに含みうる。

0066

プロセッサ500で同時に処理される一部スレッドにブランチ(branch)のような制御文が含まれている場合、制御文の実行によって、リソース衝突感知部320が命令語解釈段階で感知した結果が有効ではないこともある。このために、プロセッサ500は、図3のプロセッサ300の各構成にキュー510及びフラッシュ部520をさらに含みうる。

0067

キュー510は、リソース衝突感知部320の感知結果を保存することができる。

0068

フラッシュ部520は、制御文の実行によってキュー510に保存されている感知結果が有効ではない場合、キュー510をフラッシュ(flush)することができる。

0069

もし、スレッドに制御文が含まれていない場合、または制御文を実行しても、キュー510に保存されている感知結果が有効な場合は、キュー510は、感知結果をリソーススケジューラ330に伝送し、リソーススケジューラ330は、感知結果に基づいて衝突されたスレッドのデータパスをストールさせることができる。この際、如何なるスレッドをストールさせるかは、リソーススケジューラ330で既定の基準によって決定された処理順序による。

0070

図6は、本発明の一実施形態によるプロセッサの動作方法を示す図面である。図6を参照すれば、プロセッサの動作方法は、まず、複数のスレッドが同時に同じ演算ユニット内で同じ演算を行うかを検査して、リソースの衝突有無を感知する(610)。

0071

次いで、衝突感知結果をキュー510に保存する(620)。

0072

次いで、複数のスレッドのうち、一部に含まれた制御文の実行によってキュー510に保存されている感知結果が有効であるか否かを判断する(630)。

0073

段階630の判断の結果、キュー510に保存された感知結果が有効な場合、既定の基準によって衝突されたスレッド間の処理順序を決定し(640)、衝突されたスレッドのうち、処理順序の低いスレッドをストールする(650)。

0074

段階630の判断の結果、キュー510に保存された感知結果が有効ではない場合、キューをフラッシュし(660)、段階610に戻る。

0075

図7は、図6のリソースの衝突を感知する過程(610)の詳細なフローチャートである。図7を参照すれば、リソースの衝突を感知する過程(610)は、まず、同時に処理しようとする複数のスレッドのオペコードを各演算ユニット別に比較する(710)。例えば、各スレッドの命令語を解釈すれば、各演算ユニット別に行うようとする演算の種類がオペコードを通じて分かる。したがって、命令語パイプラインのうち、命令語解釈段階で演算ユニット別に各スレッドのオペコードを相互比較することによって、各演算ユニットが同時に同じ演算を行うか否かを判断することができる。

0076

次いで、比較の結果及びあらかじめ保存された演算子情報に基づいてリソースの衝突有無を判断する(720)。この際、演算子情報は、各演算ユニットに含まれている演算子の種類、個数及び各演算子の状態情報などを含みうる。

0077

本発明の一態様は、コンピュータで読み取り可能な記録媒体にコンピュータで読み取り可能なコードとして具現しうる。プログラムを具現するコード及びコードセグメントは、当該分野のコンピュータプログラマーによって容易に推論され得る。コンピュータで読み取り可能な記録媒体は、コンピュータシステムによって読み取れるデータが保存されるあらゆる種類の記録装置を含む。コンピュータで読み取り可能な記録媒体の例としては、ROM、RAM、CD−ROM磁気テープフロッピー登録商標ディスク光ディスクなどを含む。また、コンピュータで読み取り可能な記録媒体は、ネットワークで連結されたコンピュータシステムに分散されて、分散方式でコンピュータで読み取り可能なコードとして保存されて実行可能である。

0078

以上、本発明について、その望ましい実施形態を中心に説明した。当業者ならば、本発明が、本発明の本質的な特性から外れない範囲内で変形された形態として具現可能であることを理解できるであろう。したがって、本発明の範囲は、前述した実施形態に限定されず、特許請求の範囲に記載の内容と同等な範囲内にある多様な実施形態が含まれるように解釈しなければならない。

0079

本発明は、マルチスレッディングを支援するための演算ユニット、それを含むプロセッサ及びプロセッサの動作方法関連の技術分野に適用可能である。

0080

110入力ポート
120演算子
140出力ポート
300プロセッサ
310プロセッシング部
320リソース衝突感知部
330リソーススケジューラ
410リソース情報保存部
420オペコード比較部
430 リソース衝突有無判断部
510キュー
520フラッシュ部

ページトップへ

この技術を出願した法人

この技術を発明した人物

ページトップへ

関連する挑戦したい社会課題

該当するデータがありません

関連する公募課題

該当するデータがありません

ページトップへ

技術視点だけで見ていませんか?

この技術の活用可能性がある分野

分野別動向を把握したい方- 事業化視点で見る -

(分野番号表示ON)※整理標準化データをもとに当社作成

ページトップへ

おススメ サービス

おススメ astavisionコンテンツ

新着 最近 公開された関連が強い技術

この 技術と関連性が強い技術

関連性が強い 技術一覧

この 技術と関連性が強い人物

関連性が強い人物一覧

この 技術と関連する社会課題

該当するデータがありません

この 技術と関連する公募課題

該当するデータがありません

astavision 新着記事

サイト情報について

本サービスは、国が公開している情報(公開特許公報、特許整理標準化データ等)を元に構成されています。出典元のデータには一部間違いやノイズがあり、情報の正確さについては保証致しかねます。また一時的に、各データの収録範囲や更新周期によって、一部の情報が正しく表示されないことがございます。当サイトの情報を元にした諸問題、不利益等について当方は何ら責任を負いかねることを予めご承知おきのほど宜しくお願い申し上げます。

主たる情報の出典

特許情報…特許整理標準化データ(XML編)、公開特許公報、特許公報、審決公報、Patent Map Guidance System データ