JP5780243B2 - スケジューリング方法、およびマルチコアプロセッサシステム - Google Patents

スケジューリング方法、およびマルチコアプロセッサシステム Download PDF

Info

Publication number
JP5780243B2
JP5780243B2 JP2012551780A JP2012551780A JP5780243B2 JP 5780243 B2 JP5780243 B2 JP 5780243B2 JP 2012551780 A JP2012551780 A JP 2012551780A JP 2012551780 A JP2012551780 A JP 2012551780A JP 5780243 B2 JP5780243 B2 JP 5780243B2
Authority
JP
Japan
Prior art keywords
thread
cpu
address
time
storage area
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Fee Related
Application number
JP2012551780A
Other languages
English (en)
Other versions
JPWO2012093488A1 (ja
Inventor
浩一郎 山下
浩一郎 山下
宏真 山内
宏真 山内
鈴木 貴久
貴久 鈴木
康志 栗原
康志 栗原
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Fujitsu Ltd
Original Assignee
Fujitsu Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Fujitsu Ltd filed Critical Fujitsu Ltd
Publication of JPWO2012093488A1 publication Critical patent/JPWO2012093488A1/ja
Application granted granted Critical
Publication of JP5780243B2 publication Critical patent/JP5780243B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0806Multiuser, multiprocessor or multiprocessing cache systems
    • G06F12/0815Cache consistency protocols
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/0223User address space allocation, e.g. contiguous or non contiguous base addressing
    • G06F12/0284Multiple user address space allocation, e.g. using different base addresses
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0646Horizontal data movement in storage systems, i.e. moving data in between storage devices or systems
    • G06F3/065Replication mechanisms
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/48Program initiating; Program switching, e.g. by interrupt
    • G06F9/4806Task transfer initiation or dispatching
    • G06F9/4843Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5011Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
    • G06F9/5016Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals the resource being the memory
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3851Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution from multiple instruction streams, e.g. multistreaming
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

Description

本発明は、スレッドのスケジューリング方法、およびマルチコアプロセッサシステムに関する。
近年、1つのシステム内に、複数のコアを有するマルチコアプロセッサシステムの形態を採用する機器が増加している。マルチコアプロセッサシステム対応のプログラムを生成する場合、従来の1つのシステム内に1つのコアを有するシングルコアプロセッサシステム用のプログラムを基に、プログラム内の並列性を抽出する作業が発生する。特に、近年のソフトウェアは複雑で規模が大きいため、新しく生成するのではなく、従来からあるソフトウェア資産を流用してマルチコアプロセッサシステム用のプログラムを生成することで、プログラム生成に伴う工数、検証に伴う工数を減らすことができる。並列性を抽出する方法としては、人為的に検索する場合、または、コンパイラが並列性を抽出する技術が存在する(従来技術1と称する。)。
従来技術1を適用し、抽出された並列処理をそれぞれのコアに割り当てることで、マルチコアプロセッサシステムは、単一のコアで処理を実行する場合より高速に処理を実行することができる。なお、各コアは、プログラムの実行単位となるスレッドを実行している。また、1以上のスレッドを有するプロセスは、スレッドが利用するメモリやデバイスの管理単位である。プロセス、スレッドの性質として、同一のプロセスに属するスレッドは、メモリ空間を共有し、異なるプロセスに属するスレッド間では、メモリ空間を共有しない。
また、複数のコアの処理能力を生かす技術として、複数のアプリケーションソフトウェア(以下、「アプリ」と称する)が起動された場合、これらのアプリを別々のコアで実行することで、コアの並列効果を得る技術が開示されている(従来技術2と称する。)。また、複数のコアの負荷分散を行う技術として、周期的に複数のコアの負荷量を取得し、各コアに割り当てられたスレッドを再配置する技術が開示されている(従来技術3と称する)。
また、並列処理を行うか否かの判断技術として、親スレッドによるフォーク命令を、他のコアで実行可能か否かを判定し、可能である場合は、他のコアで子スレッドを実行する技術が開示されている。また、他のコアで子スレッドを実行する際に用いられる技術として、スレッドのコンテキスト領域を他のコアが管理する記憶領域に複写する技術が開示されている(たとえば、下記特許文献1、2を参照。)。なお、コンテキスト領域とは、CPUのレジスタの値、プログラムカウンタ、スタックポインタなどといったスレッドが使用するデータを格納する領域である。
また、スレッドを他のコアに移動させる際に発生するアドレス衝突を回避する技術として、メモリのアドレス空間を複数のスレッドで共有するアドレス空間と、スレッド間で共有しないアドレス空間を有する技術が開示されている(たとえば、下記特許文献3を参照。)。特許文献3にかかる技術では、後者のアドレス空間に対するメモリアクセスの場合にアドレス変換を行い、アドレス空間を任意に移動できるようにすることで、アドレス衝突を回避できる。
また、親スレッドから生成される子スレッドの種別として、子スレッドが親スレッドと排他動作するブロッキングスレッドと、子スレッドと親スレッドが独立して動作するノンブロッキングスレッドが存在する。以下、図15にてブロッキングスレッドとノンブロッキングスレッドの動作を示す。
図15は、ブロッキングスレッドとノンブロッキングスレッドの動作を示す説明図である。符号1501で示す説明図はブロッキングスレッドの動作について説明を行い、符号1502で示す説明図はノンブロッキングスレッドの動作について説明を行う。
符号1501で示す説明図内におけるプロセス1503は、親スレッド1504とブロッキング子スレッド1505を含んでいる。親スレッド1504とブロッキング子スレッド1505は、メモリ内に存在する同一のコンテキスト領域1506にアクセスする。ブロッキング子スレッド1505の実行中において、親スレッド1504は停止しており、ブロッキング子スレッド1505は、コンテキスト領域1506に記憶されたデータを更新する。ブロッキング子スレッド1505の実行終了後、親スレッド1504は、更新されたコンテキスト領域1506を継承し、処理を実行する。
このように、ブロッキング子スレッド1505は、親スレッド1504と独立した動作を行うが、親スレッド1504と同時実行すると、コンテキスト領域1506への同時アクセスによるリスクが存在する。したがって、ブロッキング子スレッド1505は、親スレッド1504と完全排他を取って実行する。
次に、符号1502で示す説明図内におけるプロセス1507は、親スレッド1508とノンブロッキング子スレッド1509を含んでいる。親スレッド1508とノンブロッキング子スレッド1509は、メモリ内に存在する同一のコンテキスト領域1510にアクセスする。ノンブロッキング子スレッド1509の実行中も親スレッド1508は実行され、ノンブロッキング子スレッド1509のアクセスとは異なるタイミングでコンテキスト領域1510にアクセスする。
このように、ノンブロッキング子スレッド1509は、親スレッド1508とは異なるタイミングでメモリアクセスを行うため、同時実行が許容されている。もし、コンテキスト領域1510に同時にアクセスする可能性があり、親スレッド1508とノンブロッキング子スレッド1509間で同期を取る場合、両スレッドのコードには、スレッド間通信を用いて排他処理、または同期処理を行うコードが挿入されている。
特開2003−29984号公報 特開平5−127904号公報 特開平9−146904号公報
上述した従来技術において、従来技術1にかかる技術では、並列動作させる際にはソースコードに排他処理、または同期処理を挿入する。しかしながら、人為的に検索した場合は、排他処理、または同期処理の挿入漏れが発生し、プログラム内に不具合が発生してしまうという問題があった。また、コンパイラが並列性を抽出する場合、ソフトウェア内の様々な動作状態を判断することが困難であり、適切な排他処理、または同期処理を選択することが困難であるという問題があった。
また、人為的に検索した場合、またはコンパイラが並列性を抽出する場合のいずれの方法であっても、生成される実行オブジェクトは、シングルコアプロセッサシステム用の実行オブジェクトから変更されている。したがって、検証工数の減少はほとんどなく、マルチコアプロセッサシステム用の実行オブジェクトに対する膨大な検証工程が発生するという問題があった。
また、従来技術2にかかる技術では、1つのアプリに着目すると、シングルコアプロセッサシステムと同速度で実行することになり、マルチコアプロセッサの恩恵を受けていないという問題があった。また、1つのアプリに着目した場合、複数のコアが存在するにも関わらず、1つのコアに負荷が集中するという問題があった。また、従来技術3にかかる技術は、スレッドが別のコアに移行可能であることを要求する。しかしながら、子スレッドがブロッキングスレッドの場合、子スレッドが親スレッドをブロッキングするために移行することが困難であるという問題があった。
本発明は、上述した従来技術による問題点を解消するため、シングルコア向けの実行オブジェクトを変更せずに、複数のコアに負荷分散できるスケジューリング方法、およびマルチコアプロセッサシステムを提供することを目的とする。
上述した課題を解決し、目的を達成するため、開示のスケジューリング方法は、処理される第1スレッドから第2スレッドが生成されるときに負荷が低いCPUを選択し、第2スレッドが第1スレッドと排他的動作を行うか否かを判定し、第2スレッドが排他的動作を行うときに第1スレッドがアクセスする第1記憶領域を負荷が低いCPUが管理する第2記憶領域に複写し、第2記憶領域のアドレスと所定値とに基づいて、第2スレッドが第1記憶領域にアクセスするための第2アドレスへのオフセットを算出し、第1アドレスを、第2記憶領域にアクセスするための第3アドレスに変換するために第2アドレスへのオフセットをCPUに通知する。
本スケジューリング方法、およびマルチコアプロセッサシステムによれば、シングルコア向けの実行オブジェクトを変更せずに、複数のコアに負荷分散できるという効果を奏する。
図1は、マルチコアプロセッサシステム100の動作を示す説明図である。 図2は、実施の形態にかかるマルチコアプロセッサシステムのハードウェアを示すブロック図である。 図3は、マルチコアプロセッサシステム100の機能を示すブロック図である。 図4は、ブロッキングスレッドを別CPUで実行する場合のマルチコアプロセッサシステム100の状態を示す説明図である。 図5は、ノンブロッキングスレッドを別CPUで実行する場合のマルチコアプロセッサシステム100の状態を示す説明図である。 図6は、アドレス変換装置104の機能を示す説明図である。 図7は、ブロッキングスレッドを別CPUで実行する場合のアドレス変換装置104の設定例を示す説明図である。 図8は、シングルコア実行時におけるブロッキングスレッドとノンブロッキングスレッドの実行タイミングを示す説明図である。 図9は、ブロッキング子スレッドをCPU#1に割り当てる場合の実行タイミングを示す説明図である。 図10は、ノンブロッキング子スレッドをCPU#1に割り当てる場合の実行タイミングを示す説明図である。 図11は、他CPUに割り当てる子スレッドの実行開始時における設定処理を示すフローチャート(その1)である。 図12は、他CPUに割り当てる子スレッドの実行開始時における設定処理を示すフローチャート(その2)である。 図13は、子スレッドの実行時の処理および終了時の処理を示すフローチャート(その1)である。 図14は、子スレッドの実行時の処理および終了時の処理を示すフローチャート(その2)である。 図15は、ブロッキングスレッドとノンブロッキングスレッドの動作を示す説明図である。
以下に添付図面を参照して、開示のスケジューリング方法、およびマルチコアプロセッサシステムの好適な実施の形態を詳細に説明する。
図1は、マルチコアプロセッサシステム100の動作を示す説明図である。図1におけるマルチコアプロセッサシステム100は、複数のコアとなるCPUs(Central Processing Unit)101と、メモリ102とを含む。マルチコアプロセッサシステム100は、携帯電話といった携帯端末を想定している。CPUs101には、CPU#0とCPU#1が含まれる。CPUs101とメモリ102は、バス103で接続されている。また、CPU#0、CPU#1は、それぞれ、アドレス変換装置104#0、アドレス変換装置104#1と通信可能である。アドレス変換装置104は、CPUのアクセス先アドレスを変換する機能を有する。
また、CPU#0は、メモリ102内の0x1000〜0x1fffをCPU#0管理領域として使用し、CPU#1は、メモリ102内の0x2000〜0x2fffをCPU#1管理領域として使用する。なお、CPUs101の各CPUは、自身の管理領域以外の領域にもアクセスできる。
また、CPU#0は、プロセス0、プロセス1を実行している。CPU#0は、プロセス0のデータを格納するプロセス0コンテキスト領域と、プロセス1のデータを格納するプロセス1コンテキスト領域とを、CPU#0管理領域に確保する。なお、プロセス0は、メモリ102に格納されている実行オブジェクト105が読み込まれた結果、生成されている。実行オブジェクト105は、シングルコア向けに生成された実行オブジェクトである。
プロセス0内の親スレッドがブロッキング子スレッド1の生成要求を行うと、マルチコアプロセッサシステム100は、プロセス0の親スレッドコンテキスト領域106をCPU#1管理領域に複写する。複写後、ブロッキング子スレッド1が割り当てられるCPU#1は、複写先の親スレッドコンテキスト領域107内に、子スレッド1コンテキスト領域108を生成する。
続けて、プロセス0のブロッキング子スレッド1が実行されるタイミングにあわせて、マルチコアプロセッサシステム100は、アドレス変換装置104#1に対して、アドレス変換を行うように設定する。具体的には、アドレス変換装置104#1は、ブロッキング子スレッド1からのアクセスに対し、CPU#1によるシングルコア時の子スレッド1コンテキスト領域109のアドレスから、子スレッド1コンテキスト領域108のアドレスに変換する。また、アドレス変換装置104#1は、子スレッド1コンテキスト領域108から取得されたアクセスに対するレスポンスに対して、子スレッド1コンテキスト領域108のアドレスから、シングルコア時の子スレッド1コンテキスト領域109のアドレスに変換する。
このように、マルチコアプロセッサシステム100は、ブロッキングスレッドを実行する場合、親スレッドのコンテキスト領域を複写し、ブロッキング子スレッドを実行するCPUが複写先のコンテキスト領域にアクセスするようにアドレス変換する。これにより、マルチコアプロセッサシステム100は、それぞれのCPUが異なるアドレスにアクセスするために、ブロッキングスレッドを親スレッドのCPUとは別のCPUで実行できるため、シングルコア用のプロセスを負荷分散可能となる。
(マルチコアプロセッサシステムのハードウェア)
図2は、実施の形態にかかるマルチコアプロセッサシステムのハードウェアを示すブロック図である。図2において、マルチコアプロセッサシステム100は、CPUを複数搭載するCPUs101と、ROM(Read‐Only Memory)201と、RAM(Random Access Memory)202と、を含む。また、マルチコアプロセッサシステム100は、フラッシュROM203と、フラッシュROMコントローラ204と、フラッシュROM205と、を含む。また、マルチコアプロセッサシステム100は、ユーザやその他の機器との入出力装置として、ディスプレイ206と、I/F(Interface)207と、キーボード208と、を含む。また、各部はバス103によってそれぞれ接続されている。
ここで、CPUs101は、マルチコアプロセッサシステム100の全体の制御を司る。CPUs101は、シングルコアのプロセッサを並列して接続した全てのCPUを指している。CPUs101は、CPU#0〜CPU#Nを含む。なお、Nは1以上の整数である。また、マルチコアプロセッサシステムとは、コアが複数搭載されたプロセッサを含むコンピュータのシステムである。コアが複数搭載されていれば、複数のコアが搭載された単一のプロセッサでもよく、シングルコアのプロセッサが並列されているプロセッサ群でもよい。なお、本実施の形態では、シングルコアのプロセッサであるCPUが並列されている形態を例にあげて説明する。
また、CPU#0〜CPU#Nは、それぞれ、アドレス変換装置104と通信可能である。さらに、CPU#0〜CPU#Nは、それぞれ専用のキャッシュメモリを有する。また、CPU#0〜CPU#Nは、専用のキャッシュメモリのコヒーレンシを取るため、スヌープ機構210#0〜スヌープ機構210#Nを有する。
スヌープ機構210は、CPU#0〜CPU#Nがアクセスするキャッシュメモリの整合性を取る装置である。スヌープ機構210#0〜スヌープ機構210#Nは、それぞれ通信を行っており、たとえば、CPU#0のキャッシュメモリが更新されると、スヌープ機構210#0が、スヌープ機構210#1〜スヌープ機構210#Nに更新内容を通知する。スヌープ機構210のプロトコルとしては、無効型プロトコルと更新型プロトコルが存在する。いずれのプロトコルであっても、スヌープ機構210#1〜スヌープ機構210#Nは、自身のキャッシュメモリと他のキャッシュメモリと更新状態の情報を交換する。
なお、キャッシュメモリの整合性を取る装置は、キャッシュコヒーレンシ機構に分類され、キャッシュコヒーレンシ機構の一例として、スヌープ機構が存在する。キャッシュコヒーレンシ機構は、大別してスヌープ方式を採用したスヌープ機構とディレクトリ方式とがある。本実施の形態にかかるスヌープ機構210は、ディレクトリ方式を採用したキャッシュコヒーレンシ機構であってもよい。また、スヌープ機構210は、アドレス変換装置104とバス103の間に設置される。
ROM201は、ブートプログラムなどのプログラムを記憶している。RAM202は、CPUs101のワークエリアとして使用される。フラッシュROM203は、OS(Operating System)などのシステムソフトウェアやアプリケーションソフトウェアなどを記憶している。たとえば、OSを更新する場合、マルチコアプロセッサシステム100は、I/F207によって新しいOSを受信し、フラッシュROM203に格納されている古いOSを、受信した新しいOSに更新する。
フラッシュROMコントローラ204は、CPUs101の制御にしたがってフラッシュROM205に対するデータのリード/ライトを制御する。フラッシュROM205は、フラッシュROMコントローラ204の制御で書き込まれたデータを記憶する。データの具体例としては、マルチコアプロセッサシステム100を使用するユーザがI/F207を通して取得した画像データ、映像データや、本実施の形態であるスケジューリング方法を実行するプログラムが格納されていてもよい。フラッシュROM205は、たとえば、メモリカード、SDカードなどを採用することができる。
ディスプレイ206は、カーソル、アイコンあるいはツールボックスをはじめ、文書、画像、機能情報などのデータを表示する。たとえば、ディスプレイ206は、TFT液晶ディスプレイなどを採用することができる。
I/F207は、通信回線を通じてLAN(Local Area Network)、WAN(Wide Area Network)、インターネットなどのネットワーク209に接続され、ネットワーク209を介して他の装置に接続される。そして、I/F207は、ネットワーク209と内部のインターフェースを司り、外部装置からのデータの入出力を制御する。I/F207には、たとえばモデムやLANアダプタなどを採用することができる。
キーボード208は、数字、各種指示などの入力のためのキーを有し、データの入力を行う。また、キーボード208は、タッチパネル式の入力パッドやテンキーなどであってもよい。
(マルチコアプロセッサシステム100の機能)
次に、マルチコアプロセッサシステム100の機能について説明する。図3は、マルチコアプロセッサシステム100の機能を示すブロック図である。マルチコアプロセッサシステム100は、検出部303と、判定部304と、複写部305と、算出部306と、通知部307と、設定部308と、変換部309と、を含む。
この制御部となる機能のうち、検出部303〜通知部307は、記憶装置に記憶されたプログラムをCPU#0が実行することにより、その機能を実現する。記憶装置とは、具体的には、たとえば、図2に示したROM201、RAM202、フラッシュROM203、フラッシュROM205などである。または、I/F207を経由して他のCPUが実行することにより、その機能を実現してもよい。
なお、CPU#0は、ハイパーバイザ#0、OS#0を実行する。ハイパーバイザ#0は、CPU#0などのハードウェア上で直接動作するプログラムである。ハイパーバイザ#0は、CPU#0内のレジスタを直接参照したり、CPU#0内のレジスタの情報を読み出したり、CPU#0内のレジスタの情報を書き換えたりする特権命令を実行することができるプログラムである。OS#0は、ハイパーバイザ#0上で動作するソフトウェアである。OS#0は、具体的には、スレッド、プロセスが利用するライブラリ群を提供する。また、OS#0は、スレッド、プロセスをCPU#0に割り当てるディスパッチャ、また、割り当てるスレッドを決定するスケジューラ310を有する。
なお、図3にて示しているように、CPU#1も、ハイパーバイザ#1、OS#1を実行する。さらに、図示していないが、CPU#2〜CPU#Nも、ハイパーバイザ、OSを実行する。検出部303〜通知部307は、OS#0の機能に含まれ、設定部308はハイパーバイザ#1の機能に含まれ、変換部309は、アドレス変換装置104#1の機能に含まれる。
なお、検出部303〜通知部307は、スケジューラ310の機能に含まれてもよい。また、検出部303〜通知部307がスケジューラ310の機能に含まれない場合、スケジューラ310がスレッド割当を行うことを通知する。また、図3では、CPU#2が、プロセス0の親スレッド301を実行し、CPU#1が子スレッド302を実行すると想定する。CPU#2は、親スレッド301の処理によって、親スレッドコンテキスト領域311にアクセスする。
また、図3では、検出部303〜通知部307が、CPU#0の機能であるように図示されているが、CPU#1〜CPU#Nの機能であってもよい。また、設定部308、変換部309は、子スレッドが割り当てられたCPUに対応する機能である。したがって、たとえば、子スレッドがCPU#0に割り当てられた場合に対応するため、ハイパーバイザ#0とアドレス変換装置104#0は、設定部308、変換部309と同等の機能を有していてもよい。同様に、CPU#2〜CPU#Nに対応するハイパーバイザ#2〜ハイパーバイザ#N、アドレス変換装置104#2〜アドレス変換装置104#Nも、設定部308、変換部309と同等の機能を有していてもよい。
検出部303は、複数のコアのうち第1コアに割り当てられた第1スレッドから生成される第2スレッドを第2コアに割り当てることを検出する機能を有する。たとえば、検出部303は、CPUs101のうちCPU#2に割り当てられた第1スレッドとなる親スレッドから生成される子スレッド302をCPU#1に割り当てることを検出する。なお、検出されたという情報は、CPU#0のレジスタまたはキャッシュメモリ、RAM202などの記憶領域に記憶される。
判定部304は、第1および第2スレッドが排他的に動作するか否かを判定する機能を有する。たとえば、判定部304は、子スレッド302がブロッキングスレッドである場合、第1および第2スレッドが排他的に動作すると判定し、子スレッド302がノンブロッキングスレッドである場合、第1および第2スレッドが排他的に動作しないと判定する。なお、判定結果は、CPU#0のレジスタまたはキャッシュメモリ、RAM202などの記憶領域に記憶される。
また、具体的な判定方法としては、OSが、実行オブジェクトに親スレッドが実行停止するコードが記載されているか否かで判定することができる。たとえば、OSが、POSIX(Portable Operating System Interface)に準拠したOSである場合を想定する。ブロッキングスレッドが生成される場合、実行オブジェクトの親スレッドのコードには、スレッドの生成を行うpthread_create()関数への命令が記載された後、スレッドの終了を待つpthread_join()関数への命令が記載されている。このような記載がされている場合、判定部304は、第2スレッドがブロッキングスレッドであると判定する。
複写部305は、判定部304によって第1および第2スレッドが排他的に動作すると判定された場合、第1スレッドがアクセスする複写元データを、複写元データが記憶される第1記憶領域とは異なる第2記憶領域へ複写する機能を有する。たとえば、複写部305は、子スレッド302がブロッキングスレッドである場合、親スレッドがアクセスする第1記憶領域となる親スレッドコンテキスト領域311内の複写元データを、第2記憶領域となる複写先の親スレッドコンテキスト領域312へ複写する。なお、複写を行ったという情報は、CPU#0のレジスタまたはキャッシュメモリ、RAM202などの記憶領域に記憶される。
算出部306は、複写部305によって複写された複写先データのアドレスとなる第2アドレスと所定値とに基づいて、第2アドレスへのオフセット値を算出する機能を有する。なお、所定値とは、スレッドのアクセスするメモリ範囲を示すマスク値である。たとえば、スレッドがアクセスするメモリ範囲が0x1000〜0x10ff、または0x3100〜0x31ffのように、0x0100[バイト]である場合、マスク値は0x00ffとなる。メモリ範囲の大きさは、OSが有するメモリ管理機能によって決定される。
また、算出部306は、複写先データのアドレスとなる第2アドレスと、所定値となるマスク値に対して反転した値と、の論理積を算出して、第2アドレスのオフセット値を算出してもよい。たとえば、算出部306は、複写先データのアドレスが0x2000で、マスク値が0x00ffである場合、複写先データへのアドレスのオフセット値を、0x2000&NOT(0x00ff)=0x2000として算出する。なお、NOT()は、引数内のビットを反転する機能を有する関数とする。
また、算出部306は、複写元データのアドレスとなる第1アドレスと所定値とに基づいて、複写元データのアドレスへのオフセット値を算出してもよい。また、算出部306は、複写元データのアドレスと、マスク値に対して反転した値と、の論理積を算出して、複写元データへのアドレスのオフセット値を算出してもよい。たとえば、算出部306は、複写元データのアドレスが0x3000で、マスク値が0x00ffである場合、複写元データへのアドレスのオフセット値を、0x3000&NOT(0x00ff)=0x3000として算出する。なお、算出結果は、CPU#0のレジスタまたはキャッシュメモリ、RAM202などの記憶領域に記憶される。
通知部307は、第1および第2スレッドが排他的に動作すると判定された場合、複写先データのアドレスへのオフセット値を通知する機能を有する。また、通知部307は、さらに第2スレッドの情報と所定値と複写元データのアドレスへのオフセット値とを第2コアに通知してもよい。たとえば、通知部307は、子スレッドがブロッキングスレッドか、ノンブロッキングスレッドかのうちいずれかという情報と、マスク値と、複写先データのアドレスへのオフセット値と、複写元データのアドレスへのオフセット値と、をCPU#1に通知する。また、通知部307は、第1および第2スレッドが排他的に動作しないと判定された場合、第2スレッドの情報を第2コアに通知してもよい。
設定部308は、第2スレッドが実行される場合、通知された情報を、第2スレッドを実行するコアに対応するアドレス変換装置104とスヌープ機構210に設定する機能を有する。たとえば、設定部308は、第2スレッドがブロッキングスレッドである場合、アドレス変換装置104#1に対しアドレス変換を行う設定にする。また、設定部308は、変換を行う情報として、所定値と複写先データのアドレスへのオフセット値と複写元データのアドレスへのオフセット値とをアドレス変換装置104#1に設定する。あわせて、設定部308は、コヒーレンシオフの設定をスヌープ機構210#1に設定する。
また、設定部308は、第2スレッドがノンブロッキングスレッドである場合、アドレス変換装置104#1に対しアドレス変換を行わない設定にし、コヒーレンシオンの設定をスヌープ機構210#1に設定する。
変換部309は、第2スレッドを割り当てることが検出された後、第2コアによる複写元データへのアクセスに対して、複写元データを示す第1アドレスを複写先データへのオフセット値と所定値とに応じて複写先データを示す第3アドレスに変換する機能を有する。たとえば、複写元データとなるシングルコア時の子スレッドコンテキスト領域313のアドレスを0x3010とし、複写先データとなる子スレッドコンテキスト領域314のアドレスを0x2010と想定する。このとき、変換部309は、複写元データとなるシングルコア時の子スレッドコンテキスト領域313へのアクセスに対して、アクセス先となるアドレス0x3010を0x2010に変換する。
また、変換部309は、第3アドレスから取得されたアクセスに対するレスポンスに対して、第3アドレスを複写元データへのオフセット値と所定値とに応じて複写元データを示す第4アドレスに変換してもよい。たとえば、第3アドレスを0x2010とし、複写元データとなるシングルコア時の子スレッドコンテキスト領域313のアドレスを0x3010と想定する。このとき、変換部309は、レスポンス元のアドレス0x2010を0x3010に変換する。なお、具体的な変換方法は、図7に後述する。
スケジューラ310は、マルチコアプロセッサシステム100内のスレッドの割当を制御する機能を有する。たとえば、スケジューラ310は、マルチコアプロセッサシステム100で実行中のスレッドのうち、親スレッド301をCPU#2に割り当て、子スレッド302をCPU#1に割り当てる。
図4は、ブロッキングスレッドを別CPUで実行する場合のマルチコアプロセッサシステム100の状態を示す説明図である。図4で示すマルチコアプロセッサシステム100は、CPUs101内にCPU#0〜CPU#2を含んでいる。CPU#0は、プロセス0の親スレッドを実行し、CPU#1はプロセス0のブロッキング子スレッド1を実行し、CPU#2はプロセス0のブロッキング子スレッド2を実行する。
ブロッキング子スレッド1とブロッキング子スレッド2の実行開始時に、CPU#0は、CPU#0管理領域内に存在する親スレッドコンテキスト領域401を、CPU#1管理領域、CPU#2管理領域に複写する。複写後、CPU#1は、複写先の親スレッドコンテキスト領域402に、子スレッド1コンテキスト領域403を生成する。同様に、CPU#2は、複写先の親スレッドコンテキスト領域404に、子スレッド2コンテキスト領域405を生成する。
また、ブロッキング子スレッド1とブロッキング子スレッド2が実行されるタイミングにあわせて、マルチコアプロセッサシステム100は、スヌープ機構210#1とスヌープ機構210#2を、コヒーレンシオフに設定する。スヌープ機構210の設定と同時に、マルチコアプロセッサシステム100は、アドレス変換装置104#1とアドレス変換装置104#2に対して、アドレス変換を行うように設定する。
なお、コヒーレンシオフとなったスヌープ機構210#1とスヌープ機構210#2は、キャッシュメモリの整合性を取ることを停止する。具体的に、スヌープ機構210#1とスヌープ機構210#2は、他のスヌープ機構210にキャッシュメモリの更新内容を通知しない。
具体的には、アドレス変換装置104#1は、CPU#1によるメモリ102へのアクセスのアドレスを、シングルコア時の子スレッド1コンテキスト領域406のアドレスから、子スレッド1コンテキスト領域403に変換する。たとえば、アドレス変換装置104#1は、シングルコア時の子スレッド1コンテキスト領域406の先頭アドレスである0x1010を、子スレッド1コンテキスト領域403の先頭アドレス0x2010に変換する。
同様に、アドレス変換装置104#2は、CPU#2によるメモリ102へのアクセスのアドレスを、シングルコア時の子スレッド2コンテキスト領域407のアドレスから、子スレッド2コンテキスト領域405に変換する。たとえば、アドレス変換装置104#2は、シングルコア時の子スレッド2コンテキスト領域407の先頭アドレスである0x1020を、子スレッド2コンテキスト領域405の先頭アドレス0x3020に変換する。
なお、ブロッキング子スレッド1は、子スレッド1コンテキスト領域403へのアクセスの他に、複写先の親スレッドコンテキスト領域402にもアクセスする場合がある。親スレッドコンテキスト領域には、たとえば、他の子スレッドの情報が格納されている。たとえば、ブロッキング子スレッド1が他の子スレッドの停止、再開といったような制御を行う場合、CPU#1は、複写先の親スレッドコンテキスト領域402内に存在する他の子スレッドの状態情報を変更する。
ブロッキング子スレッド1の終了後、CPU#1は、複写先の親スレッドコンテキスト領域402の更新部分を複写元となる親スレッドコンテキスト領域401に反映する。同様に、ブロッキング子スレッド2の終了後、CPU#2は、複写先の親スレッドコンテキスト領域404の更新部分を複写元となる親スレッドコンテキスト領域401に反映する。
また、図4で示すマルチコアプロセッサシステム100において、ブロッキング子スレッドを実行するCPU#1とCPU#2は、別々の記憶領域にアクセスするようになるため、メモリアクセスの効率化が行われる。
図5は、ノンブロッキングスレッドを別CPUで実行する場合のマルチコアプロセッサシステム100の状態を示す説明図である。図5で示すマルチコアプロセッサシステム100は、CPUs101内にCPU#0〜CPU#2を含んでいる。CPU#0は、プロセス1の親スレッドを実行し、CPU#1はプロセス1のノンブロッキング子スレッド1を実行し、CPU#2はプロセス1のノンブロッキング子スレッド2を実行する。
ノンブロッキングスレッドが生成される場合、CPU#1、CPU#2は、親スレッドコンテキスト領域501内に、子スレッド1コンテキスト領域502、子スレッド2コンテキスト領域503を生成する。また、ノンブロッキング子スレッド1とノンブロッキング子スレッド2が実行されるタイミングにあわせて、マルチコアプロセッサシステム100は、スヌープ機構210#1とスヌープ機構210#2を、コヒーレンシオンに設定する。
図6は、アドレス変換装置104の機能を示す説明図である。図6では、アドレス変換装置104#1を例にして説明を行うが、アドレス変換装置104#0、アドレス変換装置104#2〜アドレス変換装置104#Nも、アドレス変換装置104#1と同様の機能となる。アドレス変換装置104#1は、記憶部601、判定部602、変換部309を含む。
記憶部601は、所定値と複写先データのアドレスへのオフセット値と複写元データのアドレスへのオフセット値を記憶する機能を有する。また、記憶部601は、所定値と複写先データのアドレスへのオフセット値と複写元データのアドレスへのオフセット値の組み合わせを複数記憶し、アドレス変換を行うかという情報と、複数の組み合わせのうち、適用する組み合わせを指定する情報を記憶してもよい。
具体的に、記憶部601は、制御レジスタ603と設定レジスタ604#1〜設定レジスタ604#Mを含む。Mは1以上の整数である。なお、具体的なMの値としては、マルチコアプロセッサシステム100が同時実行可能なアプリの数の最大値でよい。本実施の形態にかかるマルチコアプロセッサシステム100は、携帯電話等を想定しており、パーソナル・コンピュータのように多数のアプリを同時実行することを想定していない。たとえば、Mは8、または16といった値となる。
制御レジスタは、変換ビット、設定レジスタ管理番号という2つのフィールドを含む。変換ビットフィールドには、アドレス変換を行うか否かを示すビットが格納される。設定レジスタ管理番号フィールドには、変換を行う場合、設定レジスタ604#1〜設定レジスタ604#Mのうち、どの設定レジスタを適用するかが格納される。
続けて、設定レジスタ604の各フィールドについて説明を行う。設定レジスタ604は、有効ビット、マスク値、オフセット値1、オフセット値2という4つのフィールドを含む。
有効ビットフィールドには、該当の設定レジスタ604が有効か否かを示すビットが格納される。マスク値フィールドには、アドレス変換装置104#1に入力されたアドレスのうち、スレッドの情報を抽出するために使用するマスクの値が格納される。オフセット値1フィールドには、複写先データのアドレスへのオフセット値となる、複写先に生成された子スレッドコンテキスト領域へのオフセットの値が格納される。オフセット値2フィールドには、複写元データのアドレスへのオフセット値となる、CPUが想定している子スレッドコンテキスト領域へのオフセットの値が格納される。なお、制御レジスタ603、設定レジスタ604の具体的な設定例は、図7にて後述する。
判定部602は、記憶部601に記憶された情報に応じてアドレス変換を行うか否かを判定する機能を有する。具体的には、判定部602は、変換ビットフィールドが有効であれば、アドレス変換を行い、変換ビットフィールドが無効であればアドレス変換を行わず、アドレススルーする。なお、変換部309は、判定部602によりアドレス変換を行うと判定された場合、アドレス変換を行う機能を有する。
図7は、ブロッキングスレッドを別CPUで実行する場合のアドレス変換装置104の設定例を示す説明図である。図7に示すマルチコアプロセッサシステム100は、CPU#0がプロセス0を実行し、CPU#2がプロセス1を実行している状態である。なお、図7で示すマルチコアプロセッサシステム100は、スヌープ機構210の表示を省略している。さらに、CPU#0は、プロセス0の親スレッド0から生成要求があったブロッキング子スレッド0をCPU#1に割り当てている。また、割当とあわせて、CPU#0は、親スレッド0コンテキスト領域701をCPU#1管理領域に複写する。CPU#1は、複写先の親スレッド0コンテキスト領域702内に、子スレッド0コンテキスト領域703を生成する。
同様に、CPU#2は、プロセス1の親スレッド1から生成要求があったブロッキング子スレッド1をCPU#1に割り当てている。また、割当とあわせて、CPU#2は、親スレッド1コンテキスト領域704をCPU#1管理領域に複写する。CPU#1は、複写先の親スレッド1コンテキスト領域705内に、子スレッド1コンテキスト領域706を生成する。
このような状態で、アドレス変換装置104#1は、ブロッキング子スレッド0がアクセスしようとするシングルコア時の子スレッド0コンテキスト領域707を、実領域である子スレッド0コンテキスト領域703に変換する。アドレス変換装置104は、下記(1)式によって入力された変換前のアドレスを変換後のアドレスに変換する。
変換後のアドレス=変換前のアドレス&マスク値+オフセット値1…(1)
たとえば、図7に示すようにブロッキング子スレッド0によるアクセスが通知される場合を想定する。ハイパーバイザ#1は、CPU#1にブロッキングキング子スレッド0が実行されることを検出して、制御レジスタ603の変換ビットに変換を示す“1”、設定レジスタ管理番号に“1”を設定する。設定レジスタ604#1は、有効ビットに有効を示す“1”、マスク値に“0x00ff”、オフセット値1に“0x2000”、オフセット値2に“0x1000”を格納している。したがって、アドレス変換装置104#1は、変換前のアドレス=“0x1010”を(1)式にしたがって、以下のように変換する。
変換後のアドレス=0x1010&0x00ff+0x2000
⇔変換後のアドレス=0x0010+0x2000
⇔変換後のアドレス=0x2010
このように、アドレス変換装置104#1の変換により、ブロッキング子スレッド0によるアクセス先が、シングルコア時の子スレッド0コンテキスト領域707から、子スレッド0コンテキスト領域703に変換される。
また、子スレッド0コンテキスト領域703から取得されたアクセスに対するレスポンスに対して、アドレス変換装置104#1は、実領域である子スレッド0コンテキスト領域703をシングルコア時の子スレッド0コンテキスト領域707に変換する。アドレス変換装置104#1は、下記(2)式によって入力された変換前のアドレスを変換後のアドレスに変換する。
変換後のアドレス=変換前のアドレス&マスク値+オフセット値2…(2)
したがって、アドレス変換装置104#1は、変換前のアドレス=“0x2010”を(2)式にしたがって、以下のように変換する。
変換後のアドレス=0x2010&0x00ff+0x1000
⇔変換後のアドレス=0x0010+0x1000
⇔変換後のアドレス=0x1010
(2)式によるアドレス変換装置104#1の変換により、アクセスに対するレスポンス元のアドレスは、子スレッド0コンテキスト領域703から、シングルコア時の子スレッド0コンテキスト領域707に変換される。変換により、(1)式の変換前のアドレスと(2)式の変換後のアドレスが一致するため、CPU#1は、ブロッキング子スレッド0によるアクセスに対するレスポンスが返却されたことを検出できる。
続けて、ブロッキング子スレッド1によるアクセスが通知される場合を想定する。このとき、アドレス変換装置104#1は、ブロッキング子スレッド1がアクセスしようとするシングルコア時の子スレッド1コンテキスト領域708を、実領域である子スレッド1コンテキスト領域706に変換する。ハイパーバイザ#1は、CPU#1にブロッキングキング子スレッド1が割り当てられたことを検出して、制御レジスタ603の変換ビットに変換を示す“1”、設定レジスタ管理番号に“2”を設定する。
設定レジスタ604#2は、有効ビットに有効を示す“1”、マスク値に“0x00ff”、オフセット値1に“0x2100”、オフセット値2に“0x3000”を格納している。したがって、アドレス変換装置104#1は、変換前のアドレス=“0x3010”を(1)式にしたがって、以下のように変換する。
変換後のアドレス=0x3010&0x00ff+0x2100
⇔変換後のアドレス=0x0010+0x2100
⇔変換後のアドレス=0x2110
このように、アドレス変換装置104#1の変換により、ブロッキング子スレッド1によるアクセス先が、シングルコア時の子スレッド1コンテキスト領域708から、子スレッド1コンテキスト領域706に変換される。
また、子スレッド1コンテキスト領域706から取得されたアクセスに対するレスポンスに対して、アドレス変換装置104#1は、実領域である子スレッド1コンテキスト領域706をシングルコア時の子スレッド1コンテキスト領域708に変換する。したがって、アドレス変換装置104#1は、変換前のアドレス=“0x2110”を(2)式にしたがって、以下のように変換する。
変換後のアドレス=0x2110&0x00ff+0x3000
⇔変換後のアドレス=0x0010+0x3000
⇔変換後のアドレス=0x3010
(2)式によるアドレス変換装置104#1の変換により、アクセスに対するレスポンス元のアドレスは、子スレッド1コンテキスト領域706から、シングルコア時の子スレッド1コンテキスト領域708に変換される。変換により、(1)式の変換前のアドレスと(2)式の変換後のアドレスが一致するため、CPU#1は、ブロッキング子スレッド1によるアクセスに対するレスポンスが返却されたことを検出できる。
図8は、シングルコア実行時におけるブロッキングスレッドとノンブロッキングスレッドの実行タイミングを示す説明図である。符号801に示す説明図では、ブロッキングスレッドの実行タイミングを示し、符号802に示す説明図では、ノンブロッキングスレッドの実行タイミングを示す。なお、符号801に示す説明図、符号802に示す説明図にて、ディスパッチ間隔となる時刻tx〜時刻tx+1の間隔は、1プロセスの割当時間となるτと設定する。また、ディスパッチを行う時刻が、ハイパーバイザ#0と通信可能な時刻である。なお、親スレッド、プロセス1、プロセス2は、CPU#0のディスパッチテーブルに格納されている。ディスパッチテーブルとは、実行可能なスレッド、プロセスを格納するテーブルである。OS#0は、ディスパッチテーブルに格納されているスレッドまたはプロセスのいずれか一つをCPU#0にディスパッチする。
符号801に示す説明図では、CPU#0が、ブロッキング子スレッドの生成要求を行う親スレッドを含むプロセス0と、プロセス1、プロセス2を実行している。時刻t0にて、CPU#0が、OS#0内のディスパッチャにより、プロセス0内の親スレッドをディスパッチし、親スレッドを実行する。τを経過した時刻t1にて、CPU#0は、プロセス1をディスパッチする。プロセス1を実行後、さらにτを経過した時刻t2にて、CPU#0は、プロセス2をディスパッチする。プロセス2を実行後、さらにτを経過した時刻t3にて、CPU#0は、プロセス0の親スレッドをディスパッチする。
時刻t3からτの経過前となる時刻t3’にて、親スレッドがブロッキング子スレッドの生成要求を行うと、CPU#0は、親スレッドからブロッキング子スレッドにディスパッチする。なお、ブロッキング子スレッドは、親スレッドをブロッキングするため、ブロッキング子スレッドが終了するまでは、親スレッドが実行されない。続けて、時刻t3からτ経過した時刻t4にて、CPU#0は、プロセス1をディスパッチする。
時刻t4以降、時刻t4〜時刻t5、時刻t7〜時刻t8、時刻t10〜時刻t11にて、CPU#0はプロセス1を実行する。同様に、時刻t5〜時刻t6、時刻t8〜時刻t9、時刻t11〜時刻t12にて、CPU#0はプロセス2を実行する。また、時刻t6〜時刻t7、時刻t9〜時刻t10にて、CPU#0はブロッキング子スレッドを実行する。時刻t12からτの経過前となる時刻t12’に、ブロッキング子スレッドが終了すると、CPU#0は、親スレッドをディスパッチし、時刻t13まで実行する。
このように、親スレッドとブロッキングスレッドをシングルコアで実行する場合、親スレッドが実行していても、子スレッドが実行していても、他のプロセスのCPUの割当時間は変更しない。説明図となる符号801の例では、親スレッドが実行している時刻t0〜時刻t3の期間では、プロセス1、プロセス2のCPU割当時間は、全体の1/3となっている。続けて、ブロッキング子スレッドが実行している時刻t4〜時刻t12の期間でも、プロセス1、プロセス2のCPU割当時間は、全体の1/3となっている。
また、ブロッキングスレッドによって停止していた親スレッドの復帰時間としては、時刻t3’から時刻t12’となる。時刻t3〜時刻t3’、時刻t12〜時刻t12’が合わせてτと想定すると、親スレッドの復帰時間は、9τとなる。
続けて、符号802に示す説明図では、CPU#0が、ノンブロッキング子スレッドの生成要求を行う親スレッドを含むプロセス0と、プロセス1、プロセス2を実行している。時刻t0〜時刻t3までは、プロセス0〜プロセス2は、符号801に示す説明図と等しいタイミングで動作するため、説明を省略する。
時刻t3からτの経過前となる時刻t3’にて、親スレッドがノンブロッキング子スレッドの生成要求を行うと、CPU#0は、親スレッドからノンブロッキング子スレッドにディスパッチする。なお、ノンブロッキング子スレッドは、親スレッドをブロッキングせず、ノンブロッキング子スレッドが実行中も、親スレッドが実行され続ける。続けて、時刻t3からτ経過した時刻t4にて、CPU#0は、プロセス1をディスパッチする。
時刻t4以降、時刻t4〜時刻t5、時刻t7〜時刻t8、時刻t10〜時刻t11にて、CPU#0はプロセス1を実行する。同様に、時刻t5〜時刻t6、時刻t8〜時刻t9、時刻t11〜時刻t12にて、CPU#0はプロセス2を実行する。
また、時刻t6からτの経過前となる時刻t6’まで、CPU#0は親スレッドを実行し、時刻t6’から時刻t7まで、CPU#0はノンブロッキング子スレッドを実行する。同様に、時刻t9からτの経過前となる時刻t9’、時刻t12からτの経過前となる時刻t12’にて、CPU#0は親スレッドを実行する。さらに、時刻t9’〜時刻t10、時刻t12’〜時刻t13にて、CPU#0はノンブロッキング子スレッドを実行する。
このように、親スレッドとノンブロッキングスレッドをシングルコアで実行する場合も、ブロッキングスレッドと同様に、親スレッドが実行していても、子スレッドが実行していても、他のプロセスのCPUの割当時間は変更しない。また、親スレッドとノンブロッキング子スレッドのCPU割当時間は、合計して1プロセス分であるτに等しくなる。
次に、図9、図10にて、ブロッキング子スレッド、または、ノンブロッキング子スレッドをCPU#1に割り当てる場合の実行タイミングを示す。なお、図9、図10にて、CPU#0のディスパッチ間隔となる時刻tx〜時刻tx+1の間隔と、CPU#1のディスパッチ間隔となる時刻t’x〜時刻t’x+1の間隔は、1プロセスの割当時間となるτであると想定する。
図9は、ブロッキング子スレッドをCPU#1に割り当てる場合の実行タイミングを示す説明図である。図9に示す説明図では、CPU#0がブロッキング子スレッドの生成要求を行う親スレッドを含むプロセス0と、プロセス1、プロセス2を実行し、CPU#1が、プロセス0内のブロッキング子スレッドと、プロセス3を実行する。時刻t0にて、CPU#0のディスパッチテーブルには、プロセス0の親スレッド、プロセス1、プロセス2が格納されており、CPU#1のディスパッチテーブルには、プロセス3が格納されている。
時刻t0〜時刻t1にて、CPU#0は、プロセス0の親スレッドを実行し、時刻t1〜時刻t2にて、プロセス1を実行し、時刻t2〜時刻t3にて、プロセス2を実行する。続けて、時刻t3にて、CPU#0は、親スレッドをディスパッチする。また、時刻t’0〜時刻t’2にて、CPU#1は、プロセス3を実行する。
時刻t3からτの経過前となる時刻t3’にて、親スレッドがブロッキング子スレッドの生成要求を行うと、CPU#0は、生成されるブロッキング子スレッドをCPU#1にディスパッチする。具体的には、時刻t’2にて、CPU#1のディスパッチテーブルに、ブロッキング子スレッドが格納される。続けて、CPU#1は、ディスパッチテーブルからブロッキング子スレッドを取得して、CPU#1にディスパッチする。なお、ブロッキング子スレッドは、親スレッドをブロッキングするため、ブロッキング子スレッドが終了するまでは、親スレッドが実行されない。したがって、CPU#0は、親スレッドをCPU#0のディスパッチテーブルから退避する。これにより、親スレッドはディスパッチされなくなったため、実行されなくなる。続けて、時刻t3からτ経過した時刻t4にて、CPU#0は、プロセス1をディスパッチする。
時刻t4以降、時刻t4〜時刻t5、時刻t6〜時刻t7、時刻t8〜時刻t9にて、CPU#0はプロセス1を実行する。同様に、時刻t5〜時刻t6、時刻t7〜時刻t8にて、CPU#0はプロセス2を実行する。また、時刻t’2〜時刻t’3、時刻t’4〜時刻t’5にて、CPU#1は、ブロッキング子スレッドを実行し、時刻t’3〜時刻t’4、時刻t’5〜時刻t’6にて、プロセス3を実行する。
時刻t’6からτの経過前となる時刻t’6’にて、ブロッキング子スレッドが終了すると、CPU#1は、親スレッドをCPU#0のディスパッチテーブルに復帰するようCPU#0に通知する。通知を受けたCPU#0は、時刻t9にて親スレッドをディスパッチする。時刻t9以降、時刻t9〜時刻t10、時刻t12〜時刻t13にて、CPU#0は親スレッドを実行する。時刻t10〜時刻t11にて、CPU#0はプロセス2を実行する。時刻t11〜時刻t12にて、CPU#0はプロセス1を実行する。また、時刻t’7〜時刻t’10にて、CPU#1はプロセス3を実行する。
このように、親スレッドとブロッキングスレッドをマルチコアで実行する場合、他のCPUの割当時間がシングルコア時より増加することになる。図9の例では、親スレッドが実行している時刻t0〜時刻t3の期間では、プロセス1、プロセス2のCPU割当時間は、全体の1/3となっている。続けて、ブロッキング子スレッドがCPU#1で実行している時刻t4〜時刻t9の期間では、プロセス1、プロセス2のCPU割当時間は1/2となり、CPU割当時間が増加している。
また、ブロッキングスレッドによって停止していた親スレッドの復帰時間としては、時刻t3’から時刻t9となる。時刻t3〜時刻t3’が0.5τと想定すると、親スレッドの復帰時間が5.5τとなり、親スレッドとブロッキングスレッドをマルチコアで実行する場合は、シングルコアで実行する場合より、復帰時間を短縮することができる。
図10は、ノンブロッキング子スレッドをCPU#1に割り当てる場合の実行タイミングを示す説明図である。図10に示す説明図では、CPU#0がノンブロッキング子スレッドの生成要求を行う親スレッドを含むプロセス0と、プロセス1、プロセス2を実行し、CPU#1が、プロセス0内のノンブロッキング子スレッドと、プロセス3を実行する。時刻t0にて、CPU#0のディスパッチテーブルには、プロセス0の親スレッド、プロセス1、プロセス2が格納されており、CPU#1のディスパッチテーブルには、プロセス3が格納されている。
時刻t0〜時刻t1にて、CPU#0は、プロセス0の親スレッドを実行し、時刻t1〜時刻t2にて、プロセス1を実行し、時刻t2〜時刻t3にて、プロセス1を実行する。続けて、時刻t3にて、CPU#0は、親スレッドをディスパッチする。また、時刻t’0〜時刻t’2にて、CPU#1は、プロセス3を実行する。また、時刻t’2〜時刻t’3にて、CPU#1は、プロセス3を実行する。
時刻t3からτの経過前にて、親スレッドがノンブロッキング子スレッドの生成要求を行うと、CPU#0は、ノンブロッキング子スレッドをCPU#1にディスパッチする。具体的には、時刻t’3にて、CPU#1のディスパッチテーブルに、ノンブロッキング子スレッドが格納される。続けて、CPU#1は、ディスパッチテーブルからノンブロッキング子スレッドを取得して、CPU#1にディスパッチする。なお、ノンブロッキング子スレッドは、親スレッドをブロッキングせず、ノンブロッキング子スレッドが実行中も、親スレッドが実行され続ける。したがって、CPU#0は、親スレッドを時刻t4まで実行する。
時刻t4以降、時刻t4〜時刻t5、時刻t7〜時刻t8、時刻t10〜時刻t11にて、CPU#0はプロセス1を実行する。同様に、時刻t5〜時刻t6、時刻t8〜時刻t9、時刻t11〜時刻t12にて、CPU#0はプロセス2を実行する。また、時刻t’3〜時刻t’4、時刻t’5〜時刻t’6にて、CPU#1は、ノンブロッキング子スレッドを実行し、時刻t’4〜時刻t’5、時刻t’6〜時刻t’7にて、プロセス3を実行する。
時刻t’7からτの経過前となる時刻t’7’にて、ノンブロッキング子スレッドが終了すると、CPU#0は、時刻t’8にて、プロセス3をディスパッチする。続けて、時刻t’8〜時刻t’10にて、CPU#1は、プロセス3を実行する。
このように、親スレッドとノンブロッキングスレッドをマルチコアで実行する場合、親スレッドとノンブロッキング子スレッドのCPU割当時間は、それぞれ1プロセス分であるτとなり、シングルコア時の割当時間より増加する。これにより、ノンブロッキングスレッドが、シングルコア時に比べてより早く終了することになる。
図3、図6に示した機能を用いて、マルチコアプロセッサシステム100は、シングルコア用の実行オブジェクトを、マルチコアで実行する。以下、図11〜図14にて、他CPUに割り当てる割当対象スレッドの実行開始時の設定処理と、実行時の処理、終了時の処理を説明する。図11〜図14では、CPU#0で実行しているOS#0が割当対象スレッドの生成を検出しているが、他のCPUとなるCPU#1〜CPU#Nで実行しているOSが検出してもよい。
図11は、他CPUに割り当てる子スレッドの実行開始時における設定処理を示すフローチャート(その1)である。OS#0は、子スレッドの生成イベントを検出する(ステップS1101)。検出後、OS#0は、CPUs101のうち、低負荷CPUを検索する(ステップS1102)。検索した結果CPU#xを低負荷CPUとして発見した場合、OS#0は、発見されたCPU#xの識別情報を設定情報として記憶する(ステップS1103)。なお、設定情報の記憶先は、メモリ102内である。記憶後、OS#0は、生成される子スレッドがブロッキングスレッドかを判断する(ステップS1104)。
ノンブロッキングスレッドである場合(ステップS1104:No)、OS#0は、コヒーレンシオン設定をスヌープ機構210#x設定情報として、設定情報に追加する(ステップS1105)。ブロッキングスレッドである場合(ステップS1104:Yes)、OS#0は、CPU#xが管理するCPU#x管理領域に、生成される子スレッドの親スレッドのコンテキスト領域を複写する(ステップS1106)。複写後、OS#0は、親スレッドをディスパッチテーブルから退避する(ステップS1107)。退避後、OS#0は、コヒーレンシオフ設定をスヌープ機構210#x設定情報として、設定情報に追加する(ステップS1108)。
ステップS1105、または、ステップS1108にてスヌープ機構210の設定情報を追加した後、OS#0は、子スレッド生成要求をOS#xに通知する(ステップS1109)。通知後、OS#0は、図12に示すステップS1201の処理に移行する。また、通知を受けたOS#xは、子スレッドのコンテキストを生成する(ステップS1110)。子スレッドのコンテキスト生成を行うことで、子スレッドが生成されたことになる。
なお、子スレッドのコンテキストの生成先は、生成される子スレッドがブロッキングスレッドであれば、CPU#x管理領域内に複写された親スレッドのコンテキスト領域内となる。生成される子スレッドがノンブロッキングスレッドであれば、CPU#0管理領域内に存在する親スレッドのコンテキスト領域内となる。生成後、CPU#xは、獲得されたコンテキスト領域のアドレスをOS#0に通知する(ステップS1111)。通知後、OS#xは、図12に示すステップS1211のOS#0からの通知まで待機する。
図12は、他CPUに割り当てる子スレッドの実行開始時における設定処理を示すフローチャート(その2)である。ステップS1111の処理にてOS#xから通知を受けた後、OS#0は、通知されたアドレスを取得する(ステップS1201)。取得後、OS#0は、生成された子スレッドがブロッキングスレッドか否かを判断する(ステップS1202)。ブロッキングスレッドである場合(ステップS1202:Yes)、OS#0は、取得されたアドレスとマスク値からオフセット値1を算出する(ステップS1203)。
なお、具体的なオフセット値1の算出方法として、たとえば、OS#0が、取得されたアドレスと、所定値となるスレッドのアクセスするメモリ範囲のマスク値に対して反転した値と、の論理積を算出し、算出結果をオフセット値1とする。具体的に、取得されたアドレスが0x2010であり、マスク値が0x00ffである場合、OS#0は、オフセット値1として、0x2010&NOT(0x00ff)=0x2000を得る。
続けて、OS#0は、親スレッドのコンテキスト領域のアドレスとマスク値からオフセット値2を算出する(ステップS1204)。なお、具体的なオフセット値2の算出方法として、たとえば、オフセット値1の算出方法と同様に、OS#0が、親スレッドのコンテキスト領域のアドレスと、所定値となるマスク値の反転した値との論理積を算出し、算出結果をオフセット値2とする。具体的に、親スレッドのコンテキスト領域のアドレスが0x1000であり、マスク値が0x00ffである場合、OS#0は、オフセット値2として、0x1000&NOT(0x00ff)=0x1000を得る。
算出後、OS#0は、生成された子スレッドの識別情報とマスク値とオフセット値1とオフセット値2を設定情報に追加する(ステップS1205)。追加後、または、子スレッドがノンブロッキングスレッドである場合(ステップS1202:No)、OS#0は、ハイパーバイザ#xに設定情報を通知する(ステップS1206)。
なお、OS#0から直接ハイパーバイザ#xに通知できない場合は、OS#0が設定情報を一旦ハイパーバイザ#0に通知し、ハイパーバイザ#0からハイパーバイザ#xに対してハイパーバイザ間通信を行って設定情報を通知してもよい。または、OS#0がOS#xに設定情報を通知し、さらにOS#xがハイパーバイザ#xに設定情報を通知してもよい。また、設定情報は、メモリ102内に記憶されているため、OS#0は、ハイパーバイザ#xに設定情報へのポインタを通知してもよい。
通知を受けたハイパーバイザ#xは、アドレス変換装置104#xの有効ビットが無効になっている設定レジスタ604#yを検索する(ステップS1207)。なお、検索方法として、ハイパーバイザ#xは、設定レジスタ604#1〜設定レジスタ604#Mのうち、番号の小さい設定レジスタ604から順に検索してよい。
発見後、ハイパーバイザ#xは、設定情報に管理番号#yを追加する(ステップS1208)。追加後、ハイパーバイザ#xは、設定レジスタ604#yの有効ビットフィールドを有効に設定する(ステップS1209)。設定後、ハイパーバイザ#xは、設定情報内のマスク値とオフセット値1とオフセット値2を、設定レジスタ604#yのマスク値フィールドとオフセット値1フィールドとオフセット値2フィールドに設定する(ステップS1210)。設定終了後、ハイパーバイザ#xは、子スレッドの実行開始時における設定処理を終了する。
ハイパーバイザ#xに通知を行ったOS#0は、生成された子スレッドの実行開始要求をOS#xに通知し(ステップS1211)、OS#0は、子スレッドの実行開始時における設定処理を終了する。通知を受けたOS#xは、生成された子スレッドを実行開始し(ステップS1212)、子スレッドの実行開始時における設定処理を終了する。
なお、ステップS1207の処理にて、有効ビットが無効になっている設定レジスタ604が存在しない場合、ハイパーバイザ#xは、OS#0に失敗したという通知を行ってもよい。失敗したという通知を受けたOS#0は、たとえば、OS#xに生成させた子スレッドのコンテキストを破棄させた後、CPU#xとは異なる低負荷CPUを再度検索してもよい。
図13は、子スレッドの実行時の処理および終了時の処理を示すフローチャート(その1)である。なお、設定情報については、図11、図12に示したフローチャートにより、CPU識別情報、スレッド識別情報、スヌープ機構210#x設定情報が含まれる。また、スレッド識別情報として設定された子スレッドがブロッキングスレッドである場合、設定情報には、さらに、管理番号#y、マスク値、オフセット値1、オフセット値2が含まれる。
図13では、子スレッドの実行時の処理を示す。OS#xは、子スレッドがディスパッチされることを検出する(ステップS1301)。検出後、OS#xは、ハイパーバイザ#xに、ディスパッチされる子スレッドの識別情報を通知する(ステップS1302)。通知を受けたハイパーバイザ#xは、子スレッドがブロッキングスレッドか否かを判断する(ステップS1303)。ブロッキングスレッドである場合(ステップS1303:Yes)、ハイパーバイザ#xは、スレッド識別情報に対応する管理番号#yと変換ビットをアドレス変換装置104#xの制御レジスタ603に設定する(ステップS1304)。
設定後、または、ブロッキングスレッドでない場合(ステップS1303:No)、ハイパーバイザ#xは、スレッド識別情報に対応するスヌープ機構210#x設定情報に基づいて、スヌープ機構210#xを設定する(ステップS1305)。ハイパーバイザ#xによる設定の完了後、OS#xは、ハイパーバイザ#xと同期を取って、子スレッドを実行する(ステップS1306)。具体的には、OS#xは、ハイパーバイザ#xによる設定が完了するまで待機し、設定の完了後に子スレッドを実行する。
子スレッド実行後、OS#xは、子スレッドが終了したかを判断する(ステップS1307)。子スレッドが終了していない場合(ステップS1307:No)、OS#xは、ステップS1301の処理に移行する。子スレッドが終了した場合(ステップS1307:Yes)、OS#xは、図14に示すステップS1401の処理に移行する。また、ハイパーバイザ#xは、ステップS1302によるOS#xによるスレッドの識別情報の通知を受けるたびに、ステップS1303〜ステップS1305の処理を行う。
図14は、子スレッドの実行時の処理および終了時の処理を示すフローチャート(その2)である。図14では、子スレッドの終了時の処理を示す。子スレッドが終了した場合、OS#xは、子スレッドがブロッキングスレッドか否かを判断する(ステップS1401)。ブロッキングスレッドである場合(ステップS1401:Yes)、OS#xは、複写先の親スレッドのコンテキスト領域の更新部分を、複写元の親スレッドのコンテキスト領域に反映する(ステップS1402)。反映後、OS#xは、親スレッドのディスパッチテーブル復帰要求をOS#0に通知する(ステップS1403)。通知を受けたOS#0は、親スレッドをディスパッチテーブルに復帰し(ステップS1404)、子スレッドの終了時の処理を終了する。
OS#0に通知後、または、子スレッドがノンブロッキングスレッドである場合(ステップS1401:No)、OS#xは、ハイパーバイザ#xに管理番号の消去要求を通知する(ステップS1405)。通知を受けたハイパーバイザ#xは、アドレス変換装置104#xの設定レジスタ604#yの有効ビットを無効に設定し(ステップS1406)、子スレッドの終了時の処理を終了する。ハイパーバイザ#xに通知後、OS#xは、設定情報を消去し(ステップS1407)、子スレッドの終了時の処理を終了する。
以上説明したように、スケジューリング方法、およびマルチコアプロセッサシステムによれば、親スレッドのコンテキスト領域を複写し、ブロッキング子スレッドを実行するCPUが複写先のコンテキスト領域をアクセスするようなオフセット値を変換する。これにより、マルチコアプロセッサシステムは、それぞれのCPUが異なるアドレスをアクセスするために、ブロッキング子スレッドを親スレッドのCPUとは他のCPUで実行できるため、シングルコア用のプロセスを負荷分散することができる。また、マルチコアプロセッサシステムは、シングルコア用の実行オブジェクトを変更せずに、マルチコアで並列処理が可能となり、ソフトウェアの検証工数を削減することができる。
また、本実施の形態にかかるマルチコアプロセッサシステムは、ブロッキングスレッドが他CPUに移行可能となり、各CPUの負荷量を、従来例にかかるマルチコアプロセッサシステムより均衡状態に近づけることができる。
たとえば、親スレッドが実行しており、負荷量の大きいブロッキング子スレッドが未実行の状態で、従来技術3にかかる技術による負荷分散が行われ、その後負荷量の大きいブロッキング子スレッドが実行された場合を想定する。このとき、従来例にかかるマルチコアプロセッサシステムでは、ブロッキング子スレッドを移行することができないため、親スレッドを実行するCPUに負荷が偏る結果となる。本実施の形態にかかるマルチコアプロセッサシステムでは、ブロッキング子スレッドを負荷量の低いCPUに移行可能であるため、負荷量をより均衡状態にすることができる。
また、マルチコアプロセッサシステムは、複数のCPUのうち、負荷の低いCPUにブロッキング子スレッドを実行させてもよい。これにより、マルチコアプロセッサシステムは、全体の負荷を均等にすることができる。また、マルチコアプロセッサシステムは、ブロッキング子スレッドを負荷の低いCPUで実行させることで、ブロッキング子スレッドの割当時間が増加されるため、子スレッドの終了時間が短縮され、同時に親スレッドの復帰時間を短縮することができる。
また、マルチコアプロセッサシステムは、ブロッキング子スレッドを他のCPUに割り当てる場合、親スレッドを、親スレッドを実行するCPUのディスパッチテーブルから退避してもよい。これにより、マルチコアプロセッサシステムは、親スレッドがCPUに割り当てられなくなり、他のプロセス、または他のスレッドのCPUの割当時間を増加することができる。
また、マルチコアプロセッサシステムは、ノンブロッキングスレッドを他のCPUに実行する場合、キャッシュメモリのコヒーレンシ設定をオンにしてもよい。これにより、マルチコアプロセッサシステムは、同一の領域にアクセスを行うデータの整合性を保つことができる。
また、マルチコアプロセッサシステムは、ブロッキングスレッドを他のCPUに実行する場合、キャッシュメモリのコヒーレンシ設定をオフにしてもよい。子スレッドがブロッキングスレッドである場合、他のCPUは、複写先の親スレッドコンテキスト領域にアクセスする。したがって、複数のCPU間で、同一のアドレスにアクセスが行われることがないため、キャッシュメモリのコヒーレンシを行わなくてよい。これにより、マルチコアプロセッサシステムは、メモリアクセスを行うたびに発生していたスヌープ機構の機能を停止できメモリアクセスの処理を高速化できる。また、マルチコアプロセッサシステムは、スヌープ機構を停止するために、消費電力を削減することができる。
また、マルチコアプロセッサシステムは、ブロッキングスレッドが終了した場合、複写先の親スレッドコンテキスト領域の更新部分を複写元の親スレッドコンテキスト領域に反映し、親スレッドをディスパッチ周期に復帰させてもよい。これにより、マルチコアプロセッサシステムは、シングルコアにて実行した状態と等しい状態にすることができる。
なお、本実施の形態で説明したスケジューリング方法は、予め用意されたプログラムをパーソナル・コンピュータやワークステーション等のコンピュータで実行することにより実現することができる。本スケジューリング方法を実行するプログラムは、ハードディスク、フレキシブルディスク、CD−ROM、MO、DVD等のコンピュータで読み取り可能な記録媒体に記録され、コンピュータによって記録媒体から読み出されることによって実行される。また本スケジューリング方法を実行するプログラムは、インターネット等のネットワークを介して配布してもよい。
また、本実施の形態で説明したアドレス変換装置104は、スタンダードセルやストラクチャードASIC(Application Specific Integrated Circuit)などの特定用途向けIC(以下、単に「ASIC」と称す。)やFPGAなどのPLD(Programmable Logic Device)によっても実現することができる。具体的には、たとえば、上述したアドレス変換装置104の機能(記憶部601、判定部602、変換部309)をHDL記述によって機能定義し、そのHDL記述を論理合成してASICやPLDに与えることにより、アドレス変換装置104を製造することができる。
上述した実施の形態に関し、さらに以下の付記を開示する。
(付記1)コンピュータによって実行されるスレッドを管理するスケジューラが、
処理される第1スレッドから第2スレッドが生成されるときに負荷が低いCPUを選択し、
前記第2スレッドが前記第1スレッドと排他的動作を行うか否かを判定し、
前記第2スレッドが排他的動作を行うときに前記第1スレッドがアクセスする第1記憶領域を前記CPUが管理する第2記憶領域に複写し、
前記第2記憶領域のアドレスと所定値とに基づいて、前記第2スレッドが前記第1記憶領域にアクセスするための第2アドレスへのオフセットを算出し、
第1アドレスを、前記第2記憶領域にアクセスするための第3アドレスに変換するために前記第2アドレスへのオフセットを前記CPUに通知すること
を特徴とするスケジューリング方法。
(付記2)前記第2スレッドにおいて前記第3アドレスに基づいて前記第2記憶領域がアクセスされること
を特徴とする付記1に記載のスケジューリング方法。
(付記3)前記第1記憶領域のアドレスと前記所定値に基づいて、前記第1アドレスへのオフセットを算出し、
前記第2記憶領域へのアクセスのレスポンスに対して、前記第1アドレスへのオフセットと前記所定値に基づいて、前記第3アドレスを前記第1記憶領域内を示す第4アドレスに変換するために前記第1アドレスへのオフセットを前記CPUに通知すること
を特徴とする付記1に記載のスケジューリング方法。
(付記4)前記第1記憶領域が前記第2記憶領域に複写された後に、前記第1スレッドを退避させること
を特徴とする付記1または付記2に記載のスケジューリング方法。
(付記5)前記第1スレッドが排他的動作を行わないとき、キャッシュメモリを同期させるためのフラグをオンすること
を特徴とする付記1に記載のスケジューリング方法。
(付記6)前記第1記憶領域が前記第2記憶領域に複写された後に、キャッシュメモリを同期させるためのフラグをオフすること
を特徴とする付記1、付記2または付記4に記載のスケジューリング方法。
(付記7)前記第2スレッドが終了したときに、前記第2記憶領域内の更新部分を前記第1記憶領域に反映して、前記第1スレッドを復帰させること
を特徴とする付記1乃至付記6の何れか一に記載のスケジューリング方法。
(付記8)第1CPUと第2CPUとを含む複数のCPUと、
前記第1CPUに対応するスケジューラと、
前記複数のCPUにバスを介して接続されるとともに、第1記憶領域と第2記憶領域とを含むメモリと、
前記複数のCPUのうちの少なくとも一のCPUと前記メモリとの間に配置されるアドレス変換装置と、
を含み、
前記アドレス変換装置は、前記第1CPUが管理する前記第1記憶領域にアクセスするためのアドレスを前記第2CPUが管理する前記第2記憶領域にアクセスするためのアドレスに変換すること
を特徴とするマルチコアプロセッサシステム。
(付記9)前記アドレス変換装置は、前記第1記憶領域のアドレスと前記第1CPUにおいて実行される第1スレッドに基づいて生成される第2スレッドが前記第1記憶領域にアクセスするためのアドレスとのオフセットに基づいて、アドレスを変換すること
を特徴とする付記8に記載のマルチコアプロセッサシステム。
(付記10)前記アドレス変換装置は、前記第2記憶領域へのアクセスのレスポンスに対して、前記第1記憶領域へのオフセットと所定値に基づいて、前記第2記憶領域のアドレスを前記第1記憶領域のアドレスに変換すること
を特徴とする付記8に記載のマルチコアプロセッサシステム。
(付記11)前記アドレス変換装置は、フラグがオン設定されているときにアドレスを変換し、前記フラグがオフ設定されているときにアドレスを変換しないこと
を特徴とする付記8または付記9に記載のマルチコアプロセッサシステム。
(付記12)前記フラグは、前記第1CPUにおいて実行される第1スレッドに基づいて生成される第2スレッドの種類に基づいて設定されること
を特徴とする付記11に記載にマルチコアプロセッサシステム。
(付記13)前記第2スレッドが前記第1スレッドと排他的動作を行う場合に前記フラグがオン設定されること
を特徴とする付記12に記載のマルチコアプロセッサシステム。
100 マルチコアプロセッサシステム
#0、#1、#2 CPU、OS、ハイパーバイザ
102 メモリ
103 バス
104 アドレス変換装置
210 スヌープ機構
301 親スレッド
302 子スレッド
303 検出部
304 判定部
305 複写部
306 算出部
307 通知部
308 設定部
309 変換部
310 スケジューラ
311 親スレッドコンテキスト領域
312 複写先の親スレッドコンテキスト領域
313 シングルコア時の子スレッドコンテキスト領域
314 子スレッドコンテキスト領域

Claims (11)

  1. コンビュータによって実行されるスレッドを管理するスケジューラが、
    第1スレッドの処理結果に応じて前記第1スレッドから第2スレッドが生成された場合に、複数のCPUのうち負荷が低い第1CPUを選択し、
    前記第2スレッドが前記第1スレッドと排他的動作を行う場合、前記第1スレッドがアクセスする第1記憶領域の複写元データを前記第1CPUが管理する第2記憶領域に複写し、
    前記第2記憶領域に複写した複写先データのアドレスと前記複数のCPUの各々のCPUに割り当てられるスレッドがアクセスするメモリ範囲を示すマスク値とに基づいて、前記第2記憶領域における前記第2スレッドがアクセスするメモリ範囲の先頭アドレスを算出し、
    前記第2スレッドが前記第1スレッドと排他的動作を行うことを示す情報と、前記第2記憶領域における前記第2スレッドがアクセスするメモリ範囲の先頭アドレスとを前記第1CPUに通知する
    スケジューリング方法。
  2. 前記第1CPUが、
    前記第2スレッドが前記第1スレッドと排他的動作を行うことを示す情報を受け付けた場合、前記第2スレッドから発生した前記複写元データへのアクセスが発生したことに応じて、前記複写元データへのアクセスのアクセス先のアドレスと、前記第2記憶領域における前記第2スレッドがアクセスするメモリ範囲の先頭アドレスと前記マスク値とに基づいて前記複写元データへのアクセスが変換された前記複写先データへのアクセスにより、前記複写先データにアクセスること
    を特徴とする請求項1に記載のスケジューリング方法。
  3. 前記第1記憶領域の複写元データが前記第2記憶領域に複写された後に、前記第1スレッドを退避させること
    を特徴とする請求項1または請求項2に記載のスケジューリング方法。
  4. 前記第2スレッドが前記第1スレッドと排他的動作を行わないとき、前記第1CPUが有するキャッシュメモリを前記複数のCPUのうち前記第1CPU以外のCPUが有するキャッシュメモリと同期させるためのフラグをオンすること
    を特徴とする請求項1に記載のスケジューリング方法。
  5. 前記第1記憶領域の複写元データが前記第2記憶領域に複写された後に、前記第1CPUが有するキャッシュメモリを前記複数のCPUのうち前記第1CPU以外のCPUが有するキャッシュメモリと同期させるためのフラグをオフすること
    を特徴とする請求項1乃至請求項3の何れか一に記載のスケジューリング方法。
  6. 前記第1スレッドを退避させた後に前記第2スレッドが終了したときに、前記第2記憶領域内の更新部分を前記第1記憶領域に反映して、前記第1スレッドを復帰させること
    を特徴とする請求項3に記載のスケジューリング方法。
  7. スレッドを実行する複数のコアと、
    前記複数のコアのうち第1のコアに接続された第1記憶領域と、
    前記複数のコアのうち第2のコアに接続された第2記憶領域と、
    を有するマルチプロセッサシステムであって、前記複数のコアのいずれかは、
    前記第1のコアが実行する第1スレッドの処理結果に応じて前記第1スレッドから第2スレッドが生成されたことに応じて前記第2スレッドが前記第1スレッドと排他的動作を行う場合に前記第1スレッドがアクセスする前記第1記憶領域の複写元データを前記第2記憶領域に複写し、前記第2記憶領域に複写した複写先データのアドレスと前記複数のコアの各々のコアに割り当てられるスレッドがアクセスするメモリ範囲を示すマスク値とに基づいて、前記第2記憶領域における前記第2スレッドがアクセスするメモリ範囲の先頭アドレスを算出し、前記第2スレッドが前記第1スレッドと排他的動作を行うことを示す情報と前記第2記憶領域における前記第2スレッドがアクセスするメモリ範囲の先頭アドレスとを前記第2のコアに通知する
    マルチコアプロセッサシステム。
  8. 前記マルチコアプロセッサシステムは、前記第2のコアと前記第2記憶領域との間に配置されるアドレス変換装置を有し、
    前記アドレス変換装置は
    前記第2スレッドが前記第1スレッドと排他的動作を行うことを示す情報を前記第2のコアから受け付けた場合、前記第2スレッドから発生した前記複写元データへのアクセスが発生したことに応じて、前記複写元データへのアクセスのアクセス先のアドレスと、前記第2記憶領域における前記第2スレッドがアクセスするメモリ範囲の先頭アドレスと前記マスク値とに基づいて、前記複写元データへのアクセスを前記複写先データへのアクセスに変換すること
    を特徴とする請求項7に記載のマルチコアプロセッサシステム。
  9. 前記アドレス変換装置は、フラグがオン設定されているときに前記複写元データへのアクセスを変換し、前記フラグがオフ設定されているときに前記複写元データへのアクセスを変換しないこと
    を特徴とする請求項8に記載のマルチコアプロセッサシステム。
  10. 前記フラグは、前記第1のコアにおいて実行される前記第1スレッドに基づいて生成される前記第2スレッドの種類に基づいて設定されること
    を特徴とする請求項9に記載にマルチコアプロセッサシステム。
  11. 前記第2スレッドが前記第1スレッドと排他的動作を行う場合に前記フラグがオン設定されること
    を特徴とする請求項10に記載のマルチコアプロセッサシステム。
JP2012551780A 2011-01-07 2011-01-07 スケジューリング方法、およびマルチコアプロセッサシステム Expired - Fee Related JP5780243B2 (ja)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
PCT/JP2011/050187 WO2012093488A1 (ja) 2011-01-07 2011-01-07 スケジューリング方法、およびマルチコアプロセッサシステム

Publications (2)

Publication Number Publication Date
JPWO2012093488A1 JPWO2012093488A1 (ja) 2014-06-09
JP5780243B2 true JP5780243B2 (ja) 2015-09-16

Family

ID=46457353

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2012551780A Expired - Fee Related JP5780243B2 (ja) 2011-01-07 2011-01-07 スケジューリング方法、およびマルチコアプロセッサシステム

Country Status (4)

Country Link
US (1) US9367459B2 (ja)
EP (1) EP2662771A4 (ja)
JP (1) JP5780243B2 (ja)
WO (1) WO2012093488A1 (ja)

Families Citing this family (23)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9401869B1 (en) * 2012-06-04 2016-07-26 Google Inc. System and methods for sharing memory subsystem resources among datacenter applications
GB2502857B (en) * 2013-03-05 2015-01-21 Imagination Tech Ltd Migration of data to register file cache
US8671232B1 (en) * 2013-03-07 2014-03-11 Freescale Semiconductor, Inc. System and method for dynamically migrating stash transactions
US9256534B2 (en) * 2014-01-06 2016-02-09 International Business Machines Corporation Data shuffling in a non-uniform memory access device
US9274835B2 (en) 2014-01-06 2016-03-01 International Business Machines Corporation Data shuffling in a non-uniform memory access device
US9830263B1 (en) * 2014-06-30 2017-11-28 EMC IP Holding Company LLC Cache consistency
US9632958B2 (en) 2014-07-06 2017-04-25 Freescale Semiconductor, Inc. System for migrating stash transactions
US9569110B2 (en) * 2014-11-18 2017-02-14 International Business Machines Corporation Efficient management of cloned data
US9747108B2 (en) * 2015-03-27 2017-08-29 Intel Corporation User-level fork and join processors, methods, systems, and instructions
US10587671B2 (en) * 2015-07-09 2020-03-10 Zscaler, Inc. Systems and methods for tracking and auditing changes in a multi-tenant cloud system
US10140150B2 (en) * 2016-02-08 2018-11-27 Microsoft Technology Licensing, Llc Thread diversion awaiting log call return
CN106293935A (zh) * 2016-07-28 2017-01-04 张升泽 电流在多核芯片内部的多区间分配方法及系统
JP6943030B2 (ja) * 2017-06-16 2021-09-29 富士通株式会社 情報処理装置、情報処理方法およびプログラム
US10353826B2 (en) * 2017-07-14 2019-07-16 Arm Limited Method and apparatus for fast context cloning in a data processing system
US10534719B2 (en) 2017-07-14 2020-01-14 Arm Limited Memory system for a data processing network
US10613989B2 (en) 2017-07-14 2020-04-07 Arm Limited Fast address translation for virtual machines
US10592424B2 (en) 2017-07-14 2020-03-17 Arm Limited Range-based memory system
US10467159B2 (en) 2017-07-14 2019-11-05 Arm Limited Memory node controller
US10489304B2 (en) 2017-07-14 2019-11-26 Arm Limited Memory address translation
US10565126B2 (en) 2017-07-14 2020-02-18 Arm Limited Method and apparatus for two-layer copy-on-write
US10884850B2 (en) 2018-07-24 2021-01-05 Arm Limited Fault tolerant memory system
US10963299B2 (en) * 2018-09-18 2021-03-30 Advanced Micro Devices, Inc. Hardware accelerated dynamic work creation on a graphics processing unit
CN110750356B (zh) * 2019-09-09 2022-03-29 华南师范大学 适用于非易失性内存的多核交互方法、系统及存储介质

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH10143382A (ja) * 1996-11-08 1998-05-29 Hitachi Ltd 共有メモリ型マルチプロセッサシステムの資源管理方法
JPH10198644A (ja) * 1997-01-13 1998-07-31 Hitachi Ltd 同期制御方法およびマルチプロセッサシステム
JP2000242510A (ja) * 1999-02-25 2000-09-08 Fujitsu Ltd 共有記憶媒体の書き込み同期制御方法
JP2007504535A (ja) * 2003-08-28 2007-03-01 ミップス テクノロジーズ インコーポレイテッド マルチスレッド化されたマイクロプロセッサで並行命令ストリームを開始する命令

Family Cites Families (16)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP0416768B1 (en) * 1989-09-08 1998-06-17 Digital Equipment Corporation Thread private memory storage for multi-thread digital data processors
JPH05127904A (ja) 1991-11-05 1993-05-25 Matsushita Electric Ind Co Ltd 情報処理装置及びコード生成装置
GB2272085A (en) * 1992-10-30 1994-05-04 Tao Systems Ltd Data processing system and operating system.
JP3687990B2 (ja) * 1994-01-25 2005-08-24 株式会社日立製作所 メモリアクセス機構
JP3639366B2 (ja) 1995-11-29 2005-04-20 富士通株式会社 アドレス空間共有システム
US6212604B1 (en) * 1998-12-03 2001-04-03 Sun Microsystems, Inc. Shared instruction cache for multiple processors
JP3702813B2 (ja) * 2001-07-12 2005-10-05 日本電気株式会社 マルチスレッド実行方法及び並列プロセッサシステム
US7469321B2 (en) * 2003-06-25 2008-12-23 International Business Machines Corporation Software process migration between coherency regions without cache purges
WO2005022384A1 (en) 2003-08-28 2005-03-10 Mips Technologies, Inc. Apparatus, method, and instruction for initiation of concurrent instruction streams in a multithreading microprocessor
US7689971B2 (en) * 2004-08-09 2010-03-30 Intel Corporation Method and apparatus for referencing thread local variables with stack address mapping
US8079035B2 (en) * 2005-12-27 2011-12-13 Intel Corporation Data structure and management techniques for local user-level thread data
US7653789B2 (en) * 2006-02-01 2010-01-26 Sun Microsystems, Inc. Multiprocessor system that supports both coherent and non-coherent memory accesses
US8041929B2 (en) * 2006-06-16 2011-10-18 Cisco Technology, Inc. Techniques for hardware-assisted multi-threaded processing
US8495636B2 (en) * 2007-12-19 2013-07-23 International Business Machines Corporation Parallelizing single threaded programs by performing look ahead operation on the single threaded program to identify plurality of instruction threads prior to execution
US20100332763A1 (en) * 2009-06-30 2010-12-30 International Business Machines Corporation Apparatus, system, and method for cache coherency elimination
US8280866B2 (en) * 2010-04-12 2012-10-02 Clausal Computing Oy Monitoring writes using thread-local write barrier buffers and soft synchronization

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH10143382A (ja) * 1996-11-08 1998-05-29 Hitachi Ltd 共有メモリ型マルチプロセッサシステムの資源管理方法
JPH10198644A (ja) * 1997-01-13 1998-07-31 Hitachi Ltd 同期制御方法およびマルチプロセッサシステム
JP2000242510A (ja) * 1999-02-25 2000-09-08 Fujitsu Ltd 共有記憶媒体の書き込み同期制御方法
JP2007504535A (ja) * 2003-08-28 2007-03-01 ミップス テクノロジーズ インコーポレイテッド マルチスレッド化されたマイクロプロセッサで並行命令ストリームを開始する命令

Also Published As

Publication number Publication date
US9367459B2 (en) 2016-06-14
US20130297888A1 (en) 2013-11-07
EP2662771A1 (en) 2013-11-13
WO2012093488A1 (ja) 2012-07-12
JPWO2012093488A1 (ja) 2014-06-09
EP2662771A4 (en) 2014-05-21

Similar Documents

Publication Publication Date Title
JP5780243B2 (ja) スケジューリング方法、およびマルチコアプロセッサシステム
Li et al. NUMA-aware shared-memory collective communication for MPI
KR101123443B1 (ko) 프로세서 시스템에서 명령어 레벨에서의 자원 할당 식별을 가능하게 하는 방법 및 장치
TWI512466B (zh) 在複數執行緒處理單元中的效率式記憶體虛擬化
JP5488697B2 (ja) マルチコアプロセッサシステム、同期制御方法、および同期制御プログラム
JP5733385B2 (ja) エンディアン変換方法、およびシステム
TW201432570A (zh) 在複數執行緒處理單元中的效率式記憶體虛擬化
US9448934B2 (en) Affinity group access to global data
CN104583943A (zh) 拥有具有分布式结构的动态分派窗口的虚拟加载存储队列
CN104823154A (zh) 具有拥有统一结构的动态分派窗口的虚拟加载存储队列
CN104823168A (zh) 用于实现从由加载存储重新排序和优化所引发的推测性转发缺失预测/错误中恢复的方法和系统
CN104583956A (zh) 用于实现加载存储重新排序和优化的指令定义
JPWO2012124078A1 (ja) 同期方法、マルチコアプロセッサシステム、および同期システム
US20150194198A1 (en) Multi-core processor system, memory controller control method, and computer product
JP5321748B2 (ja) マルチコアプロセッサシステム、スレッド制御方法、およびスレッド制御プログラム
JP5708450B2 (ja) マルチコアプロセッサシステム、レジスタ利用方法、およびレジスタ利用プログラム
WO2012144012A1 (ja) スレッド処理方法、およびスレッド処理システム
CN105487837A (zh) 具有载入扩展页表指令的处理器
JP5811211B2 (ja) マルチコアプロセッサシステム、マルチコアプロセッサシステムの制御方法、およびマルチコアプロセッサシステムの制御プログラム
US9298622B2 (en) Affinity group access to global data
JP5817860B2 (ja) マルチコアプロセッサシステム、マルチコアプロセッサシステムの制御方法、およびマルチコアプロセッサシステムの制御プログラム
CN115756742A (zh) 直通i/o虚拟化的性能优化设计方法、系统、介质及设备
JP2020086871A (ja) 情報処理装置、プログラム、オペレーティングシステム、実行方法及びプログラムの修正方法
JP2014149765A (ja) コンパイラ、オブジェクトコード生成方法、情報処理装置及び情報処理方法

Legal Events

Date Code Title Description
A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20140708

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20140908

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20150331

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20150601

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20150616

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20150629

R150 Certificate of patent or registration of utility model

Ref document number: 5780243

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

LAPS Cancellation because of no payment of annual fees