JP5621856B2 - メモリ制御方法、およびシステム - Google Patents

メモリ制御方法、およびシステム Download PDF

Info

Publication number
JP5621856B2
JP5621856B2 JP2012554532A JP2012554532A JP5621856B2 JP 5621856 B2 JP5621856 B2 JP 5621856B2 JP 2012554532 A JP2012554532 A JP 2012554532A JP 2012554532 A JP2012554532 A JP 2012554532A JP 5621856 B2 JP5621856 B2 JP 5621856B2
Authority
JP
Japan
Prior art keywords
application
port
memory
address
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
JP2012554532A
Other languages
English (en)
Other versions
JPWO2012101760A1 (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 JPWO2012101760A1 publication Critical patent/JPWO2012101760A1/ja
Application granted granted Critical
Publication of JP5621856B2 publication Critical patent/JP5621856B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C7/00Arrangements for writing information into, or reading information out from, a digital store
    • G11C7/10Input/output [I/O] data interface arrangements, e.g. I/O data control circuits, I/O data buffers
    • G11C7/1075Input/output [I/O] data interface arrangements, e.g. I/O data control circuits, I/O data buffers for multiport memories each having random access ports and serial ports, e.g. video RAM
    • 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
    • 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
    • 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/10Address translation
    • 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/10Address translation
    • G06F12/1009Address translation using page tables, e.g. page table structures
    • 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/10Address translation
    • G06F12/1009Address translation using page tables, e.g. page table structures
    • G06F12/1018Address translation using page tables, e.g. page table structures involving hashing techniques, e.g. inverted page tables
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/16Combinations of two or more digital computers each having at least an arithmetic unit, a program unit and a register, e.g. for a simultaneous processing of several programs
    • G06F15/163Interprocessor communication
    • G06F15/167Interprocessor communication using a common memory, e.g. mailbox
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/76Architectures of general purpose stored program computers
    • G06F15/78Architectures of general purpose stored program computers comprising a single central processing unit
    • G06F15/7807System on chip, i.e. computer system on a single chip; System in package, i.e. computer system on one or more chips in a single package
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/10Providing a specific technical effect
    • G06F2212/1016Performance improvement
    • 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/44Arrangements for executing specific programs
    • G06F9/445Program loading or initiating

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Hardware Design (AREA)
  • Computing Systems (AREA)
  • Microelectronics & Electronic Packaging (AREA)
  • Software Systems (AREA)
  • Multimedia (AREA)
  • Multi Processors (AREA)
  • Stored Programmes (AREA)
  • Memory System Of A Hierarchy Structure (AREA)

Description

本発明は、メモリアクセスを制御するメモリ制御方法、およびシステムに関する。
従来から、コンピュータシステムには様々なデバイスが搭載されており、各デバイスがメインメモリへのアクセスを行っている。たとえば、携帯電話の例では、CPU(Central Processing Unit)と、DBB(Digital Base Band processor)と、GPU(Graphics Processing Unit)と、LCDC(Liquid Crystal Display Controller)を搭載する。コンピュータシステムで実行されるアプリケーションソフトウェア(以下、「アプリ」と称する)は、CPU、DBB、GPU、LCDCといったデバイスを連携動作して、ユーザにサービスを提供する。
続けて、具体的な連携動作について説明する。コンピュータシステムは、初めに、DBBが通信網から取得したデータをメモリに格納する。次に、取得されたデータに対して、CPUがコーデック処理の前処理を行う。続けて、前処理が行われたデータに対して、GPUがコーデック処理を行う。コーデック処理が行われたデータに対して、CPUがコーデック処理の後処理を行う。最後に、LCDCが、後処理が行われたデータを読み込み、LCD(Liquid Crystal Display)に出力する。このように、コンピュータシステムは、これらのデバイスをパイプライン式に連携動作させることで、処理性能を向上することができる。
しかし、前述の連携動作を行うと、各デバイスがメインメモリに同時にアクセスすることで、アクセス競合が発生する場合があった。アクセス競合が発生すると、メインメモリにアクセスを行ったデバイスのうち、いずれかのデバイスがアクセス待ちを行うため、処理性能が低下する。アクセス競合を避ける技術として、たとえば、デバイス数と等しいメモリを有し、各メモリには、デバイス数に等しいメモリコントローラを有する技術が開示されている(たとえば、下記特許文献1を参照。)。
特開2010−97311号公報
しかしながら、上述した従来技術において、特許文献1にかかる技術では、デバイスの数分のメモリとメモリコントローラを要求するため、回路規模が大きくなり、製造コストが増大してしまうという問題があった。
本発明は、上述した従来技術による問題点を解消するため、製造コストを増大させずに、複数のデバイスによるメモリのアクセス競合を回避できるメモリ制御方法、およびシステムを提供することを目的とする。
上述した課題を解決し、目的を達成するため、本発明の一側面によれば、第1アプリ内の第1処理を実行する割当先デバイスを登録するテーブルに基づいて第1アプリ内の第1処理を割当先デバイスに割り当て、第1アプリで使用されるメモリのポートの識別情報をポート接続器に通知するとともにポート番号をテーブルに登録し、メモリポートに記憶領域を割り当てるとともに記憶領域のアドレスをデーブルに登録するメモリ制御方法は、およびシステムが提案される。
本発明の一側面によれば、複数のデバイスによるメモリのアクセス競合を回避できるという効果を奏する。
図1は、マルチコアプロセッサシステム100の連携動作の様子を示す説明図である。 図2は、本実施の形態にかかるマルチコアプロセッサシステム100のハードウェアとソフトウェアを示すブロック図である。 図3は、ポート接続器208の内部を示す説明図である。 図4は、アドレス変換器209の内部と設定方法の一例を示す説明図である。 図5は、マルチコアプロセッサシステム100の機能を示すブロック図である。 図6は、ポート113とポート114とメモリブロック210の設定例を示す説明図である。 図7は、アプリシナリオテーブル214の記憶内容の一例を示す説明図である。 図8は、アプリシナリオテーブル214の動作に従ったマルチコアプロセッサシステム100における時刻t1の状態を示す説明図である。 図9は、アプリシナリオテーブル214の動作に従ったマルチコアプロセッサシステム100における時刻t2の状態を示す説明図である。 図10は、アプリシナリオテーブル214の動作に従ったマルチコアプロセッサシステム100における時刻t3の状態を示す説明図である。 図11は、アプリシナリオテーブル214の動作に従ったマルチコアプロセッサシステム100における時刻t4の状態を示す説明図である。 図12は、アプリシナリオテーブル214の動作に従ったマルチコアプロセッサシステム100における時刻t5の状態を示す説明図である。 図13は、アプリシナリオテーブル214の動作に従ったマルチコアプロセッサシステム100における時刻t6の状態を示す説明図である。 図14は、アプリシナリオテーブル214の生成処理を示すフローチャートである。 図15は、メモリ制御処理を示すフローチャート(その1)である。 図16は、メモリ制御処理を示すフローチャート(その2)である。 図17は、メモリ制御処理を示すフローチャート(その3)である。 図18は、メモリ制御処理を示すフローチャート(その4)である。 図19は、メモリ制御処理を示すフローチャート(その5)である。
以下に添付図面を参照して、開示のメモリ制御方法、およびシステムの実施の形態を詳細に説明する。なお本実施の形態にかかるメモリ制御方法を実行するシステムの例として、複数のCPUを有するマルチコアプロセッサシステムにて説明を行う。マルチコアプロセッサとは、コアが複数搭載されたプロセッサである。コアが複数搭載されていれば、複数のコアが搭載された単一のプロセッサでもよく、シングルコアのプロセッサが並列されているプロセッサ群でもよい。なお、本実施の形態では、説明を単純化するため、シングルコアのプロセッサが並列されているプロセッサ群を例に挙げて説明する。また、メモリ制御方法を実行するシステムは、コアが単一であるシングルコアプロセッサシステムであってもよい。
図1は、マルチコアプロセッサシステム100の連携動作の様子を示す説明図である。符号101で示す説明図は、ある時刻での連携動作の様子を示した図である。符号102で示す説明図は、従来例におけるマルチコアプロセッサシステム100において、連携動作中の時刻t1と時刻t3の状態を示す説明図である。符号103で示す説明図は、本実施の形態におけるマルチコアプロセッサシステム100において、連携動作中の時刻t1と時刻t3の状態を示す説明図である。
符号101で示す説明図では、アプリとして、アプリ#0とアプリ#1が存在し、それぞれが連携動作を行うことを想定している。具体的には、アプリ#0がDBB104によるネットワークからの受信済データ121を処理し、アプリ#1がCPUs105のうちCPU#0からDBB104への送信対象データ122を処理する。なお、デバイス間で連携動作を行うソフトウェアであれば、アプリケーションソフトウェア以外のソフトウェアであってもよい。たとえば、OS(Operating System)などの基本ソフトウェアであっても、デバイス間で連携動作する処理が存在すれば、本実施の形態におけるメモリ制御方法を適用できる。
アプリ#0は、時刻t1にてDBB104が、ネットワークからの受信済データ121を処理開始する。時刻t2にて、CPU#0が、受信済データ121に対してコーデックデコード処理の前処理を行う。時刻t3にて、GPU106がコーデック処理を行う。以降、コーデックデコード処理に対する後処理と、表示処理が発生するが、符号101で示す説明図では、以降の処理の表示を省略している。また、時刻t3にて、CPU#0が、送信対象データ122を生成する。以降、コーデックエンコード処理と、コーデック処理に対する後処理、送信処理が発生するが、符号101で示す説明図では、以降の処理の表示を省略している。
次に、符号102で示す説明図において、従来例におけるマルチコアプロセッサシステム100は、DBB104と、複数のCPUを含むCPUs105と、GPU106と、メモリ107と、を含む。また、各部はバス108にて接続されている。なお、DBB104と、CPUs105と、GPU106を、メモリにアクセスするデバイスと定義する。たとえば、デバイスには、DSP(Digital Signal Processor)も含まれる。
またメモリ107に対する入出力ポートとして、ポート109#0と、ポート109#1が存在する。さらに、メモリ107は、DBB104が管理する記憶領域であるDBB管理領域110とCPUs105とGPU106が管理する記憶領域であるCPU・GPU管理領域111とを含む。対象デバイスがDBB管理領域110にアクセスする場合、対象デバイスはポート109#0を経由してDBB管理領域110にアクセスする。同様に、対象デバイスがCPU・GPU管理領域111にアクセスする場合、対象デバイスはポート109#1を経由してCPU・GPU管理領域111にアクセスする。
時刻t1において、DBB104は、ポート109#0を経由してDBB管理領域110内に受信済データ121を書き込む。次に、時刻t2にて、CPU#0が、受信済データ121をCPU・GPU管理領域111にコピーした後、受信済データ121に対して前処理を実行する。続けて、時刻t3にて、GPU106が、受信済データ121に対してコーデックデコード処理を実行する。同時に、時刻t3にて、CPU#0が、送信対象データ122を生成する。時刻t3では、CPU#0と、GPU106が同時にポート109#1にアクセスするため、アクセス競合が発生する。
続けて、符号103で示す説明図において、本実施の形態におけるマルチコアプロセッサシステム100は、DBB104と、CPUs105と、GPU106と、メモリ107と、を含む。また、各部はバス108にて接続されている。
さらに、本実施の形態におけるマルチコアプロセッサシステム100では、メモリ107とバス108の間にメモリコントローラ112が存在する。バス108とメモリコントローラ112間の入出力ポートとして、ポート113#0とポート113#1が存在し、メモリコントローラ112とメモリ107間の入出力ポートとして、ポート114#0とポート114#1が存在する。また、メモリ107は、ポート113#0でアクセスする記憶領域115#0と、ポート113#1でアクセスする記憶領域115#1とを含む。また、本実施の形態におけるマルチコアプロセッサシステム100では、ポート113#0をアプリ#0用ポートに設定し、記憶領域115#0をアプリ#0用領域に設定する。
時刻t1において、DBB104は、アプリ#0用ポートに設定されたポート113#0、ポート114#0を経由して、アプリ#0用領域に設定された記憶領域115#0内に受信済データ121を書き込む。次に、時刻t2にて、CPU#0は、記憶領域115#0内の受信済データ121に対してコピーをせず、記憶領域115#0内の受信済データ121に対して前処理を実行する。続けて、時刻t3にて、GPU106は、ポート113#0、ポート114#0を経由して、記憶領域115#0内の受信済データ121に対してコーデックデコード処理を実行する。同時に、時刻t3にて、CPU#0が、アプリ#0用ポートでないポート113#1、ポート114#1を経由して、アプリ#0用領域でない記憶領域115#1に送信対象データ122を生成する。
このように、本実施の形態におけるマルチコアプロセッサシステム100は、メモリの管理領域をアプリごとに分けているため、記憶領域間のコピーが発生せず、記憶領域間のコピーを回避することができる。また、本実施の形態におけるマルチコアプロセッサシステム100は、特定のアプリが使用するポートを設定しておくことで、異なるアプリを実行中のデバイスが同一のポートにアクセスすることが発生しなくなる。これにより、本実施の形態におけるマルチコアプロセッサシステム100は、メモリに対するアクセス競合を回避することができる。
なお、以降の記載において、マルチコアプロセッサシステム100について特に記述のない場合は、本実施の形態におけるマルチコアプロセッサシステム100に関する説明文である。
(マルチコアプロセッサシステム100のハードウェア)
図2は、本実施の形態にかかるマルチコアプロセッサシステム100のハードウェアとソフトウェアを示すブロック図である。図2において、マルチコアプロセッサシステム100のハードウェアは、DBB104、CPUs105と、GPU106と、LCDC201と、LCD202と、フラッシュROMコントローラ203と、フラッシュROM204、キーボード205と、を含む。各部は、バス108によってそれぞれ接続されている。
さらに、マルチコアプロセッサシステム100は、メモリ107を含む。メモリ107は、メモリコントローラ112を経由してバス108に接続している。バス108とメモリコントローラ112は、ポート113#0〜ポート113#3によって接続されており、メモリコントローラ112とメモリ107は、ポート114#0〜ポート114#3によって接続されている。さらに、マルチコアプロセッサシステム100は、アンテナ206と、RF(Radio Frequency)回路207と、を含む。RF回路207は、DBB104と接続しており、アンテナ206は、RF回路207と接続している。
DBB104は、RF回路207からの通知によって通話の検出を行い、通信、通話機能を担当するプロセッサである。CPUs105は、マルチコアプロセッサシステム100の全体の制御を司る。また、CPUs105は、CPU#0〜CPU#2を含む。さらに、CPUs105は、1以上のCPUを含んでもよい。また、CPU#0〜CPU#2は、専用のキャッシュメモリを含んでいてもよい。GPU106は、グラフィック処理に特有なコーデック処理を行う。LCDC201は、LCD202を制御して、画像データ、動画データを表示させる。たとえば、LCDC201は、VRAM(Video Random Access Memory)を読み込んで、LCD202に表示する。
メモリ107は、主記憶装置または補助記憶装置である。具体的には、メモリ107は、ROM(Read‐Only Memory)、RAM(Random Access Memory)、フラッシュROMといった記憶装置である。ROMは、ブートプログラムなどのプログラムを記憶している。RAMは、CPUs105のワークエリアとして使用される。フラッシュROMは、OSなどのシステムソフトウェアやアプリケーションソフトウェア等の実行オブジェクトを記憶している。
また、メモリ107は、ポート114#0〜ポート114#3ごとに物理アドレス空間を分断したメモリブロック210#0〜メモリブロック#3に分けられる。メモリブロック210#0〜メモリブロック210#3は、物理アドレス空間が連続していてもよいし、離れていてもよい。また、メモリ107で1つのメモリバンクとして存在してもよいし、1つのメモリブロックが1つのメモリバンクとして存在してもよい。
また、メモリブロック210#0の物理アドレスの範囲は0x0000〜0x00ffである。同様に、メモリブロック210#1の物理アドレスの範囲は0x0100〜0x01ffである。メモリブロック210#2の物理アドレスの範囲は0x0200〜0x02ffである。メモリブロック210#3の物理アドレスの範囲は0x0300〜0x03ffである。
メモリコントローラ112は、メモリ107へのデータの読み出し、書き込みを制御する機能を有する。本実施の形態にかかるメモリコントローラ112は、メモリ107にアクセスするポート113#0〜ポート113#3、ポート114#0〜ポート114#3の設定を変更することで、デバイスのメモリ107へのアクセスを制御する。
また、メモリコントローラ112の内部には、ポート接続器208と、アドレス変換器209を含む。ポート接続器208は、メモリコントローラ112の内部に存在し、ポート113#0〜ポート113#3の接続、または非接続を行う。図2の例では、ポート接続器208は、ポート113#2とポート113#3を非接続に設定している。ポート接続器208の具体的な設定例は、図3にて後述する。
アドレス変換器209は、メモリコントローラ112の内部に存在し、ポート113#0〜ポート113#3のアドレス変換を行う。アドレス変換器209の具体的な変換例は、図4にて後述する。
LCD202は、カーソル、アイコンあるいはツールボックスをはじめ、文書、画像、機能情報などのデータを表示する。たとえば、LCD202は、TFT(Thin Film Transistor)液晶ディスプレイなどを採用することができる。
フラッシュROMコントローラ203は、CPUs105の制御にしたがってフラッシュROM204に対するデータのリード/ライトを制御する。フラッシュROM204は、フラッシュROMコントローラ203の制御で書き込まれたデータを記憶する。データの具体例としては、マルチコアプロセッサシステム100を使用するユーザがアンテナ206を経由して取得した画像データ、映像データや、本実施の形態であるメモリ制御方法を実行するプログラムが格納されていてもよい。フラッシュROM204は、たとえば、メモリカード、SDカードなどを採用することができる。
キーボード205は、数字、各種指示などの入力のためのキーを有し、データの入力を行う。また、キーボード205は、タッチパネル式の入力パッドやテンキーなどであってもよい。
アンテナ206は、無線信号を送受信する。RF回路207は、高周波処理部であり、アンテナ206を介してインターネットなどのネットワークからデータを受信したり、ネットワークへデータを送信したりする。ここでは、RF回路207は、A(Analog)/D(Digital)コンバータやD/Aコンバータなどを含んでいることとし、アンテナ206からのデータをディジタル信号に変換したり、DBB104からのデータをアナログ信号に変換したりする。
次に、マルチコアプロセッサシステム100で実行されるソフトウェアは、OS211と、動画再生アプリ212と、GUI(Graphical User Interface)アプリ213と、を含む。また、マルチコアプロセッサシステム100の記憶領域には、アプリシナリオテーブル214が格納されている。
OS211は、マルチコアプロセッサシステム100を制御するプログラムである。たとえば、OS211は、CPU#0〜CPU#2が実行するアプリのスケジューリング処理を行う。また、OS211は、アプリが使用するライブラリを提供する。動画再生アプリ212は、ユーザがアンテナ206等から経由して取得したストリーミング動画、またはフラッシュROM204に格納してある動画データを再生するソフトウェアである。GUIアプリ213は、LCD202上にアイコンやメニューで選択項目を表示し、ユーザによるキーボード205の操作によって選択項目を選択することで、マルチコアプロセッサシステム100を操作することを可能とするソフトウェアである。
アプリシナリオテーブル214は、メモリ107にアクセスするデバイスと、デバイスが実行する処理と、処理が実行される順序とを、ソフトウェアごとに記憶するテーブルである。たとえば、動画再生アプリ212が時刻t1にストリーミング動画再生要求を受け、さらに、GUIアプリ213が時刻t3に静止画像のプレビュー画像表示要求を受けた場合を想定する。
このとき、動画再生アプリ212は、アプリシナリオテーブル214にしたがって、時刻t1ではDBB104で受信処理を実行し、時刻t2ではCPUs105のうちいずれかのCPUで前処理を実行し、時刻t3ではGPU106でコーデック処理を実行する。さらに、動画再生アプリ212は、時刻t4ではCPUs105のいずれかのCPUで後処理を実行し、時刻t5ではLCDC201で表示処理を実行する。また、動画再生アプリ212は、時刻t1〜時刻t5間にて、ポート113#0、ポート114#1を経由してメモリブロック210#1内の記憶領域215#1にアクセスする。
なお、動画再生アプリ212が扱う全データは、ファイルシステムによって、フラッシュROM204等の補助記憶装置に格納されており、全データの一部が、OS211の機能によって、メモリ107に配置される。したがって、記憶領域215#1がメモリブロック210#1をはみ出すことはない。
また、GUIアプリ213は、アプリシナリオテーブル214にしたがって、時刻t3ではCPUs105のうちいずれかのCPUで前処理を実行し、時刻t4ではGPU106でコーデック処理を実行する。さらに、GUIアプリ213は、時刻t5ではCPUs105のうちのいずれかのCPUで後処理を実行し、時刻t6ではLCDC201で表示処理を実行する。さらに、GUIアプリ213は、時刻t3〜時刻t6間にて、ポート113#1、ポート114#0を経由してメモリブロック210#0内の記憶領域215#0にアクセスする。
図3は、ポート接続器208の内部を示す説明図である。ポート接続器208は、メモリコントローラ112に含まれ、バス108とアドレス変換器209の間に存在し、ポート113#0〜ポート113#3、ポート114#0〜ポート114#3の接続、非接続を制御する。ポート113#0〜ポート113#3、ポート114#0〜ポート114#3の接続、非接続は、CPU#0〜CPU#2によってアクセスされる設定レジスタ301によって制御される。設定レジスタ301は、設定レジスタ301#0〜設定レジスタ301#3を含み、ポート113#0〜ポート113#3、ポート114#0〜ポート114#3の接続、非接続を制御する。
具体的には、設定レジスタ301#0は、スイッチ#0を制御し、ポート113#0の接続、非接続を設定する。設定レジスタ301#0は、設定値が“使用中”であればポート113#0、ポート114#0を接続にし、設定値が“未使用”であればポート113#0、ポート114#0を非接続にする。他の設定レジスタ301も同様に、設定レジスタ301#1〜設定レジスタ301#3が、それぞれ、ポート113#1〜ポート113#3、ポート114#1〜ポート114#3の接続、非接続を行う。接続となったポートは、対象アプリによって使用中のポートとなる。また、非接続となったポートは、未使用となりポート内の結線に電力が供給されなくなる。結果、ポートが不要の場合にポートを非接続とすることで、省電力効果を得ることができる。
図4は、アドレス変換器209の内部と設定方法の一例を示す説明図である。符号401で示す説明図は、アドレス変換器209の内部を示す説明図である。アドレス変換器209は、メモリコントローラ112に含まれ、ポート接続器208とメモリ107の間に存在し、ポート113#0〜ポート113#3、ポート114#0〜ポート114#3の論理アドレスと物理アドレスを変換する。各ポートの論理アドレスと物理アドレスの変換は、CPU#0〜CPU#2によってアクセスされる変換レジスタ403#0〜変換レジスタ403#3によって制御される。
具体的には、変換レジスタ403#0は、TLB(Translation Lookaside Buffer)#0を制御する。制御されたTLB#0は、ポート113#0、ポート114#0の論理アドレス空間と物理アドレス空間を変換する。同様に、変換レジスタ403#1〜変換レジスタ403#3がTLB#1〜TLB#3を制御することで、それぞれ、ポート113#1〜ポート113#3、ポート114#1〜ポート114#3の論理アドレス空間と物理アドレス空間を変換する。
符号402で示す説明図は、変換レジスタ403の設定例を示す説明図である。変換レジスタ403#0の設定に応じて、TLB#0に設定される内容が変化する。変換レジスタ403は、論理アドレス、物理アドレス、という2つのフィールドを含む。論理アドレスフィールドは、アプリからアクセス要求される論理アドレスの値の範囲を格納する。物理アドレスフィールドは、論理アドレスに対応するメモリ107内の物理アドレスの範囲を格納する。
CPUs105は、変換レジスタ403と同フィールドを有するアドレス変換テーブル404をアドレス変換器209に通知し、通知を受けたアドレス変換器209は、アドレス変換テーブル404を変換レジスタ403に設定する。アドレス変換テーブル404の設定例としては、たとえば、アドレス変換テーブル404−0〜アドレス変換テーブル404−5である。
たとえば、CPU#0〜CPU#2のうちCPU#0が変換レジスタ403#0〜変換レジスタ403#3を設定すると想定する。たとえば、CPU#0が、変換レジスタ403#0をアドレス変換テーブル404−0に格納した場合、TLB#0の設定はアドレス変換テーブル404−0となる。アドレス変換テーブル404−0には、論理アドレス空間0x0000〜0x00ffを、メモリブロック210#0の物理アドレス空間0x0000〜0x00ffに変換するレコードが格納されている。
同様に、アドレス変換テーブル404−1には、論理アドレス空間0x0000〜0x00ffを、メモリブロック210#1の物理アドレス空間0x0100〜0x01ffに変換するレコードが格納されている。また、アドレス変換テーブル404−2には、論理アドレス空間0x0000〜0x00ffを、メモリブロック210#2の物理アドレス空間0x0200〜0x02ffに変換するレコードが格納されている。また、アドレス変換テーブル404−3には、論理アドレス空間0x0000〜0x00ffを、メモリブロック210#3の物理アドレス空間0x0300〜0x03ffに変換するレコードが格納されている。
また、アドレス変換テーブル404−0〜アドレス変換テーブル404−3では、メモリブロック210内の全ての物理アドレスを変換していたが、一部のアドレス範囲を変換してもよい。たとえば、アドレス変換テーブル404−4には、論理アドレス空間0x0000〜0x003fを、メモリブロック210#1の物理アドレス空間0x0180〜0x01bfに変換するレコードが格納されている。同様に、アドレス変換テーブル404−5には、論理アドレス空間0x0000〜0x002fを、メモリブロック210#0の物理アドレス空間0x00a0〜0x00cfに変換するレコードが格納されている。
たとえば、変換レジスタ403#0にアドレス変換テーブル404−1が設定された場合を想定する。このとき、アドレス変換器209は、ポート113#0を経由したアクセスに対して、デバイスがアクセスしようとしている論理アドレスを、ポート114#1を経由したメモリブロック210#1内の物理アドレスに変換する。
したがって、アドレス変換器209を経由してメモリ107にアクセスする対象アプリは、対象アプリ用に確保された記憶領域の物理アドレスのアドレスを意識せず、常に固定のアドレスとなる論理アドレスに対してアクセスを行うことができる。
(マルチコアプロセッサシステム100の機能)
次に、マルチコアプロセッサシステム100の機能について説明する。図5は、マルチコアプロセッサシステム100の機能を示すブロック図である。マルチコアプロセッサシステム100は、検出部501と、割当部502と、決定部503と、制御部504と、登録部505と、を含む。この制御部となる機能(検出部501〜登録部505)は、記憶装置に記憶されたプログラムをCPUs105が実行することにより、その機能を実現する。記憶装置とは、具体的には、たとえば、メモリ107、フラッシュROM204などである。
また、図5に示すアプリシナリオテーブル214は、CPU#0内に記載されているが、マルチコアプロセッサシステム100起動時には、メモリ107、フラッシュROM204といった記憶装置に記憶されている。図5ではマルチコアプロセッサシステム100起動後に、アプリシナリオテーブル214は、CPU#0のキャッシュメモリにコピーされた状態を想定している。なお、図5に示す検出部501〜登録部505は、CPU#0の機能として表示されているが、CPUs105のうち他のCPUの機能であってもよい。
検出部501は、第1アプリが起動されることを検出する機能を有する。たとえば、検出部501は、アプリ#0が起動されることを検出する。なお、検出されたという情報は、CPU#0のレジスタ、キャッシュメモリなどの記憶領域に記憶される。
割当部502は、第1アプリで使用されるメモリ107へのポートを割り当てるとともに、ポートに対応する記憶領域を割り当てる機能を有する。たとえば、割当部502は、アプリ#0で使用されるポートを、ポート113のうちポート113#1に割り当てつつ、アプリ#0が使用する記憶領域として、記憶領域215#0を割り当てる。なお、割り当てられたポートの識別情報、記憶領域のアドレス等は、CPU#0のレジスタ、キャッシュメモリなどの記憶領域に記憶される。
また、割当部502は、検出部501によって検出された第1アプリがアプリシナリオテーブル214に登録されている場合、ポート113のうちシナリオ情報が有るアプリ用の第1ポートを割り当ててもよい。また、割当部502は、検出部501によって検出された第1アプリがアプリシナリオテーブル214に登録されていない場合、ポート113のうちシナリオ情報が無いアプリ用の第2ポートを割り当ててもよい。なお、シナリオ情報とは、対象アプリが実行される際の処理順序に関する情報である。シナリオ情報の具体的な詳細については、図7にて説明する。
同様に、割当部502は、第1アプリがアプリシナリオテーブル214に登録されている場合、メモリ107の記憶領域のうちシナリオ情報が有るアプリ用の第1記憶領域を割り当ててもよい。また、割当部502は、第1アプリがアプリシナリオテーブル214に登録されていない場合、メモリ107の記憶領域のうちシナリオ情報が無いアプリ用の第2記憶領域を割り当ててもよい。
たとえば、マルチコアプロセッサシステム100は、シナリオ情報が有るアプリ用の第1ポートとしてポート113#0、ポート113#1を設定し、シナリオ情報が無いアプリ用の第2ポートとしてポート113#2、ポート113#3を設定しておいてもよい。割当部502は、設定内容にしたがって、シナリオ情報が有るアプリに対しては、ポート113#0、ポート113#1のうちいずれか一つのポートを割り当てる。また、割当部502は、シナリオ情報が無いアプリに対しては、ポート113#2、ポート113#3のうちいずれか一つのポートを割り当てる。
また、割当部502は、第1アプリがシナリオ情報が有るアプリである場合、未使用の第1ポートが存在するか否かを判断する。続けて、割当部502は、未使用の第1ポートが存在する場合に未使用の第1ポートを割り当て、未使用の第1ポートが存在しない場合に第2ポートを割り当ててもよい。
たとえば、ポート113#0、ポート113#1が、シナリオ情報が有る他のアプリによって使用中である場合を想定する。このとき、割当部502は、第1アプリがシナリオ情報が有るアプリである場合、未使用の第1ポートが存在しないと判断し、第2ポートを割り当てる。なお、割り当てられたポート、記憶領域は、アプリシナリオテーブル214に記憶されるほか、CPU#0のレジスタ、キャッシュメモリなどの記憶領域に記憶されてもよい。
決定部503は、第1アプリ内の第1処理を実行する割当先デバイスを登録するアプリシナリオテーブル214に基づいて第1アプリ内の第1処理に割当先デバイスを割り当てることを決定する機能を有する。たとえば、決定部503は、アプリシナリオテーブル214のレコード群から起動を検出したアプリ#0のレコードを参照し、第1処理を実行する割当先デバイスとしてDBB104を割り当てることを決定する。
また、決定部503は、第1アプリ内の第1処理を実行する割当先デバイスがアプリシナリオテーブル214に登録されていないとき、第1アプリを負荷が最小であるデバイスに割り当ててもよい。なお、決定されたデバイスの識別情報は、CPU#0のレジスタ、キャッシュメモリなどの記憶領域に記憶される。なお、デバイスの負荷の算出方法として、CPU#0が、単位時間あたりのデバイスの実行時間の比率を負荷として算出する。また、別の算出方法として、CPU#0が、デバイスに割り当てられている処理数に基づいて、算出してもよい。または、デバイスに割り当てられている処理に付与されている処理情報の合計を、デバイスの負荷として算出してもよい。なお、処理情報は、事前に各処理を計測しておく。
制御部504は、決定部503に決定された割当先デバイスが割当部502によって割り当てられたポートを経由して割当部502によって割り当てられた記憶領域にアクセスするようにメモリコントローラ112を制御する機能を有する。
たとえば、割当部502によって、ポート113#1と、記憶領域215#0が割り当てられた場合を想定する。このとき、制御部504は、ポート113#1が使用されるようにポート接続器208を制御しつつ、ポート113#1のアクセス先が記憶領域215#0となるようにアドレス変換器209を制御する。具体的に、制御部504は、ポート接続器208の設定レジスタ301#1を使用中に設定する。続けて、制御部504は、割当先デバイスがアクセスする論理アドレスとメモリ107内の記憶領域の物理アドレスとを変換するアドレス変換テーブル404−5をアドレス変換器209の変換レジスタ403#1に設定する。
また、制御部504は、対象デバイスにて、第1アプリから第2アプリに切り替わるとき、アプリシナリオテーブル214から、第2アプリに対応するポートの識別情報を取得して、ポート接続器208に通知してもよい。たとえば、制御部504は、DBB104に対して、アプリ#0からアプリ#1に切り替わった場合、アプリ#1に対応するポートの識別情報を取得して、ポート接続器208に通知する。
なお、制御部504は、対象デバイスが割り当てられたポートを経由してアクセスするようにメモリコントローラ112を制御する機能を有しているが、対象デバイスがメモリコントローラ112を制御するように、対象デバイスを制御してもよい。
登録部505は、割当部502によって割り当てられたポートおよび記憶領域のアドレスを、アプリシナリオテーブル214に登録する機能を有する。たとえば、登録部505は、割当部502によって割り当てられたポート113#1と、記憶領域215#0のアドレスをアプリシナリオテーブル214のアプリ#0のレコード内に登録する。
また、登録部505は、第1アプリを実行中に、メモリ107へのアクセス回数、およびデバイスの使用回数を記録し、アクセス回数、使用回数、および第1アプリの処理負荷に基づいて第1アプリをアプリシナリオテーブル214に登録してもよい。たとえば、登録部505は、メモリ107へのアクセス回数とデバイスの使用回数が所定の閾値以上である場合に、アプリシナリオテーブル214に登録する。
このように、マルチコアプロセッサシステム100は、メモリ107と、メモリ107に対して入出力を行うポートを複数有するメモリコントローラ112と、メモリ107にアクセス可能なデバイス群と、を含むシステムである。そして、マルチコアプロセッサシステム100は、デバイスが実行する処理をアプリごとに記憶するアプリシナリオテーブル214に基づいて、対象アプリの起動を検出する。対象アプリの起動が検出された場合、マルチコアプロセッサシステム100は、ポート103#0〜ポート103#3のうち未使用のポートを対象アプリが使用するポートとして割り当てつつ、メモリ107のうち対象アプリが使用する記憶領域を割り当てる。
割当後、マルチコアプロセッサシステム100は、アプリシナリオテーブル214を参照して、対象アプリに対応する処理が割り当てられるデバイスを割当先デバイスに決定する。決定後、マルチコアプロセッサシステム100は、決定された割当先デバイスが割り当てられたポートを経由して、割り当てられた記憶領域にアクセスするようにメモリコントローラ112を制御する。また、マルチコアプロセッサシステム100は、割当先デバイスを、割り当てられたポートに対応する記憶領域にアクセスするように制御してもよい。
また、処理が複数存在する場合、アプリシナリオテーブル214は、複数の処理と複数の処理を実行するデバイスと複数の処理が実行される順序とを、アプリごとに記憶してもよい。アプリシナリオテーブル214に基づいて、マルチコアプロセッサシステム100は、対象アプリにおいて複数の処理のうち特定の処理が完了したことが検出された場合、特定の処理の次の処理を実行するデバイスを割当先デバイスに決定してもよい。
図6は、ポート113とポート114とメモリブロック210の設定例を示す説明図である。図6で示す説明図では、アプリシナリオテーブル214のシナリオ情報が有るアプリか否かに基づいて、ポート113、ポート114、メモリブロック210のうち、使用するポートと、使用される記憶領域を設定する例を示している。なお、シナリオ情報については、図7にて後述する。
マルチコアプロセッサシステム100は、たとえば、符号601で示される範囲のポート113とメモリブロック210をシナリオ情報が有るアプリ用のポートおよび記憶領域として設定する。具体的に、マルチコアプロセッサシステム100は、ポート113#0〜ポート113#3のうち、ポート113#0とポート113#1を、シナリオ情報が有るアプリ用のポートとして設定する。また、マルチコアプロセッサシステム100は、メモリブロック210#0〜メモリブロック210#3のうち、メモリブロック210#0とメモリブロック210#1をシナリオ情報が有るアプリ用の記憶領域として設定する。
たとえば、マルチコアプロセッサシステム100は、動画再生アプリ212が使用するポートを113#0に設定し、動画再生アプリ212がアクセスする記憶領域をメモリブロック210#1に設定する。なお、動画再生アプリ212は、メモリブロック210#1の中から、動画再生アプリ212が使用する記憶領域215#1を確保する。同様に、マルチコアプロセッサシステム100は、GUIアプリ213が使用するポートを113#1に設定し、GUIアプリ213がアクセスする記憶領域をメモリブロック210#0に設定する。なお、GUIアプリ213は、メモリブロック210#0の中から、GUIアプリ213が使用する記憶領域215#0を確保する。
また、マルチコアプロセッサシステム100は、符号602で示される範囲のポート113とメモリブロック210をシナリオ情報が無いアプリ用のポートおよび記憶領域として設定する。具体的に、マルチコアプロセッサシステム100は、ポート113#2とポート113#3を、シナリオ情報が無いアプリ用のポートとして設定する。また、マルチコアプロセッサシステム100は、メモリブロック210#0〜メモリブロック210#3のうち、メモリブロック210#2とメモリブロック210#3をシナリオ情報が無いアプリ用の記憶領域として設定する。
なお、マルチコアプロセッサシステム100は、シナリオ情報が無いアプリ用の記憶領域として、メモリブロック210#2とメモリブロック210#3を結合した、メモリブロック210#2−3を設定してもよい。たとえば、図6の例では、マルチコアプロセッサシステム100にて、シナリオ情報が無いアプリが6つあり、前述のアプリがアクセスする記憶領域として、記憶領域603#0〜記憶領域603#5が確保されている。
図7は、アプリシナリオテーブル214の記憶内容の一例を示す説明図である。アプリシナリオテーブル214は、対象アプリが実行される際の情報となる処理実行情報をアプリごとに記憶する。処理実行情報は、シナリオ情報、使用ポート、先頭物理アドレスという3つの項目を含む。シナリオ情報は、対象アプリが実行される際の処理順序に関する情報である。具体的に、シナリオ情報には、シナリオ情報が有りか無しかを示す識別子が格納される。シナリオ情報が有りとして登録されている場合、シナリオ情報は、さらに、順序、処理、対象デバイス、という3つのフィールドを含むシナリオ情報テーブル701を含む。なお、シナリオ情報は、対象アプリが実行される前に生成されている。
さらに、対象アプリによるメモリ107へのアクセス頻度、またはデバイスの使用回数が少ない場合、デバイス間のアクセス競合、またはコピー処理が発生せず、マルチコアプロセッサシステム100は、本実施のメモリ制御方法を行わなくともよくなる。したがって、このような場合、対象アプリのシナリオ情報が、無しとして登録されてもよい。
順序フィールドには、処理が呼び出される順番が格納されている。処理フィールドには、処理内容を示す情報が格納されている。具体的に、処理フィールドには、関数名、関数への先頭アドレスといった値が格納されている。対象デバイスフィールドには、処理フィールドにて指定された処理によって実行されるデバイスの識別情報が格納されている。また、対象デバイスフィールドには、CPUs105が処理フィールドに格納された処理を実行することで、頻繁に呼び出されるデバイスを設定してもよい。
使用ポートには、ポート113#0〜ポート113#3のうち、対象アプリに設定されたポートの識別情報が格納される。ポートの識別情報とは、たとえば、ポート番号といった、ポート113を一意に特定できる情報である。先頭物理アドレスには、対象アプリに割り当てられた記憶領域の物理アドレスの先頭値が格納される。なお、使用ポート、先頭物理アドレスは、対象アプリが実行開始する際に設定される。
たとえば、図7に示すアプリシナリオテーブル214には、アプリ#0〜アプリ#Nが登録されている。Nは2以上の整数である。さらに、図7に示すアプリシナリオテーブル214の状態は、マルチコアプロセッサシステム100にて、アプリ#0、アプリ#1が実行中である状態であることを想定している。
アプリ#0〜アプリ#2は、シナリオ情報有りで登録されており、シナリオ情報に、それぞれ、シナリオ情報テーブル701#0〜シナリオ情報テーブル701#2を含む。また、アプリ#Nは、シナリオ情報無しで登録されており、シナリオ情報にシナリオ情報テーブル701を含まない。
この状態で、アプリ#0は、シナリオ情報に沿って、処理の1番目としてDBB104がfuncAを実行し、処理の2番目として、CPUs105のいずれかのCPUがfuncBを実行する。さらに、アプリ#0は、処理の3番目として、GPU106がfuncCを実行し、処理の4番目として、CPUs105のいずれかのCPUがfuncDを実行し、処理の5番目として、LCDC201がfuncEを実行する。また、アプリ#0は、ポート113のうち、使用ポートとして、ポート113#0が設定されており、メモリ107の物理アドレスとして0x0180が割り当てられている。
また、アプリ#1は、シナリオ情報に沿って、処理の1番目としてCPUs105のいずれかのCPUがfuncFを実行し、処理の2番目として、GPU106がfuncGを実行する。さらに、アプリ#0は、処理の3番目として、CPUs105のいずれかのCPUがfuncHを実行し、処理の4番目として、LCDC201がfuncIを実行する。また、アプリ#1は、ポート113のうち、使用ポートとして、ポート113#1が設定されており、メモリ107の物理アドレスとして0x00a0が割り当てられている。
また、アプリ#2が実行する場合は、シナリオ情報にしたがって、処理の1番目としてCPUs105のいずれかのCPUがfuncJを実行し、処理を続行して、処理のn番目として、LCDC201がfuncKを実行することになる。nは、1以上の整数である。なお、アプリ#2は実行開始されていないため、使用ポートと先頭物理アドレスには値が設定されていない。
また、アプリ#Nは、シナリオ情報無しとして登録されたアプリである。アプリ#Nが実行される場合、アプリシナリオテーブル214の使用ポートは設定されず、アプリ#Nは、図6で示したシナリオ情報が無いアプリ用のポートの一つを使用してメモリ107にアクセスする。アプリ#Nのシナリオ情報は、無しを示す識別子で登録される。また、先頭物理アドレスは、図6で示したシナリオ情報が無いアプリ用の記憶領域から確保された物理アドレスの先頭が設定される。
以降、図8〜図13にて、図7で示したアプリシナリオテーブル214にしたがってアプリ#0とアプリ#1が実行する場合の状態を示す。アプリ#0が実行開始要求を受け、順序1の処理を実行する時刻を時刻t1と想定する。同様に、順序2の処理を実行する時刻を時刻t2と想定し、順序3の処理を実行する時刻を時刻t3と想定し、順序4の処理を実行する時刻を時刻t4と想定し、順序5の処理を実行する時刻を時刻t5と想定する。
さらに、アプリ#1が時刻t3に実行開始要求を受け、順序1の処理を実行することを想定する。同様に、アプリ#1が時刻t4に順序2の処理を実行することを想定し、時刻t5に順序3の処理を実行することを想定する。また、アプリ#1が順序4の処理を実行する時刻を時刻t6と想定する。また、図8〜図13にて、アプリシナリオテーブル214に付随する接尾記号“_tx”は、時刻txでのアプリシナリオテーブル214の内容を示している。
また、アプリ#0とアプリ#1によって実行される処理のうち、CPUs105によって実行される処理は、CPUs105のうち、CPU#0によって実行される場合を想定する。なお、CPUs105のうち最も負荷の低いCPUが、CPUs105によって実行される処理を実行してもよい。
また、シナリオ情報が有るアプリ用のポートの使用状況については、アプリシナリオテーブル214にて記憶されているため、どのポートが未使用であるか判断できる。したがって、マルチコアプロセッサシステム100は、未使用のポートに関しては非接続にすることで、消費電力を削減することができる。シナリオ情報が無いアプリ用のポートの使用状況については、アプリシナリオテーブル214にて記憶しておらず、どのポートが未使用であるか判断できないために、ポート接続器208は、シナリオ情報が無いアプリ用のポートを常に使用中に設定する。
なお、マルチコアプロセッサシステム100は、シナリオ情報が無いアプリ用のポートの使用状況も記憶するようにした上で、シナリオ情報が無いアプリ用のポートのうち、使用されていないポートを未使用に設定してもよい。
図8は、アプリシナリオテーブル214の動作に従ったマルチコアプロセッサシステム100における時刻t1の状態を示す説明図である。時刻t1にて、アプリ#0が実行開始要求を受けると、マルチコアプロセッサシステム100は、使用ポートとして、シナリオ情報が有るアプリ用のポートからポート113#0を選択する。選択後、マルチコアプロセッサシステム100は、ポート接続器208にポート113#0の使用を通知する。通知を受けたポート接続器208は、設定レジスタ301#0を使用中に設定する。
さらに、マルチコアプロセッサシステム100は、シナリオ情報が有るアプリ用の記憶領域から、メモリブロック210#1を選択する。続けて、マルチコアプロセッサシステム100は、メモリブロック210#1の空き領域として、記憶領域801をアプリ#0に割り当てる。なお、記憶領域801の物理アドレス範囲を、アドレス変換テーブル404−4の物理アドレスフィールドに設定された値であると想定する。
割当後、マルチコアプロセッサシステム100は、アドレス変換テーブル404−4をアドレス変換器209に通知する。通知を受けたアドレス変換器209は、変換レジスタ403#0を、アドレス変換テーブル404−4に設定する。設定後、マルチコアプロセッサシステム100は、設定されたポート113#0、割り当てられた記憶領域801の先頭アドレス0x0180を、アプリシナリオテーブル214に登録する。登録した結果、アプリシナリオテーブル214の値は、アプリシナリオテーブル214_t1で示す内容となる。前述の設定により、時刻t1におけるDBB104は、アプリ#0のfuncAを実行し、ポート113#0を経由して、メモリブロック210#1内の記憶領域801にアクセスする。
図9は、アプリシナリオテーブル214の動作に従ったマルチコアプロセッサシステム100における時刻t2の状態を示す説明図である。時刻t2にて、アプリ#0がCPUs105のうちCPU#0に割り当てられた場合、マルチコアプロセッサシステム100は、ポート接続器208にポート113#0の使用を通知し、アドレス変換テーブル404−4をアドレス変換器209に通知する。通知を受けたポート接続器208は、設定レジスタ301#0を使用中に設定する。同じく通知を受けたアドレス変換器209は、変換レジスタ403#0を、アドレス変換テーブル404−4に設定する。また、アプリシナリオテーブル214_t2はアプリシナリオテーブル214_t1と等しい内容となる。
なお、時刻t2は、時刻t1以後の時刻となるが、時刻t1の直後でなくてもよい。時刻t2が時刻t1の直後でない場合、時刻t1と時刻t2の間に、他のアプリの実行によって、設定レジスタ301#0と変換レジスタ403#0の設定値が変更されている可能性がある。したがって、マルチコアプロセッサシステム100は、時刻t2にて再度、ポート113#0の使用とアドレス変換テーブル404−4を通知する。もし、時刻t2が時刻t1の直後である場合、マルチコアプロセッサシステム100は、再通知を行わなくてよい。
前述の設定により、時刻t2におけるCPU#0は、アプリ#0のfuncBを実行し、ポート113#0を経由して、メモリブロック210#1内の記憶領域801にアクセスする。このように、マルチコアプロセッサシステム100は、記憶領域801に記憶されたデータを転送せずに、データをDBB104の管理領域からCPUs105の管理領域に転送したことと同じ効果を生むことができる。
図10は、アプリシナリオテーブル214の動作に従ったマルチコアプロセッサシステム100における時刻t3の状態を示す説明図である。時刻t3にて、アプリ#0がGPU106に割り当てられた場合、マルチコアプロセッサシステム100は、ポート接続器208にポート113#0の使用を通知し、アドレス変換テーブル404−4をアドレス変換器209に通知する。通知を受けたポート接続器208は、設定レジスタ301#0を使用中に設定する。同じく通知を受けたアドレス変換器209は、変換レジスタ403#0を、アドレス変換テーブル404−4に設定する。
さらに、時刻t3にて、アプリ#1が実行開始要求を受けると、マルチコアプロセッサシステム100は、使用ポートとして、シナリオ情報が有るアプリ用のポートからポート113#1を選択する。選択後、マルチコアプロセッサシステム100は、ポート接続器208にポート113#1の使用を通知する。通知を受けたポート接続器208は、設定レジスタ301#1を使用中に設定する。
さらに、マルチコアプロセッサシステム100は、シナリオ情報が有るアプリ用の記憶領域から、メモリブロック210#0を選択する。続けて、マルチコアプロセッサシステム100は、メモリブロック210#0の空き領域として、記憶領域1001をアプリ#1に割り当てる。なお、記憶領域801の物理アドレス範囲を、アドレス変換テーブル404−5の物理アドレスフィールドに設定された値であると想定する。
割当後、マルチコアプロセッサシステム100は、アドレス変換テーブル404−5をアドレス変換器209に通知する。通知を受けたアドレス変換器209は、変換レジスタ403#1を、アドレス変換テーブル404−5に設定する。マルチコアプロセッサシステム100は、設定されたポート113#1、割り当てられた記憶領域1001の先頭アドレス0x00a0を、アプリシナリオテーブル214に登録する。登録した結果、アプリシナリオテーブル214の内容は、アプリシナリオテーブル214_t3のようになる。
前述の設定により、時刻t3におけるGPU106は、アプリ#0のfuncCを実行し、ポート113#0を経由して、メモリブロック210#1内の記憶領域801にアクセスする。また、時刻t3におけるCPU#0は、アプリ#1のfuncFを実行し、ポート113#1を経由して、メモリブロック210#0内の記憶領域1001にアクセスする。このように、マルチコアプロセッサシステム100は、GPU106とCPU#0が別々のポート、別々の記憶領域にアクセスするため、アクセス競合を回避することができる。また、時刻t3におけるマルチコアプロセッサシステム100は、時刻t2におけるマルチコアプロセッサシステム100と同様に、記憶領域801に記憶されたデータの転送を行わなくてよい。
図11は、アプリシナリオテーブル214の動作に従ったマルチコアプロセッサシステム100における時刻t4の状態を示す説明図である。時刻t4にて、アプリ#0がCPUs105のうちCPU#0に割り当てられた場合、マルチコアプロセッサシステム100は、ポート接続器208にポート113#0の使用を通知し、アドレス変換テーブル404−4をアドレス変換器209に通知する。通知を受けたポート接続器208は、設定レジスタ301#0を使用中に設定する。同じく通知を受けたアドレス変換器209は、変換レジスタ403#0を、アドレス変換テーブル404−4に設定する。
同様に、時刻t4にて、アプリ#1がGPU106に割り当てられた場合、マルチコアプロセッサシステム100は、ポート接続器208にポート113#1の使用を通知し、アドレス変換テーブル404−5をアドレス変換器209に通知する。通知を受けたポート接続器208は、設定レジスタ301#1を使用中に設定する。同じく通知を受けたアドレス変換器209は、変換レジスタ403#1を、アドレス変換テーブル404−5に設定する。また、アプリシナリオテーブル214_t4はアプリシナリオテーブル214_t3と等しい内容となる。
前述の設定により、時刻t4におけるCPU#0は、アプリ#0のfuncDを実行し、ポート113#0を経由して、メモリブロック210#1内の記憶領域801にアクセスする。また、時刻t4におけるGPU106は、アプリ#1のfuncGを実行し、ポート113#1を経由して、メモリブロック210#0内の記憶領域1001にアクセスする。このように、マルチコアプロセッサシステム100は、CPU#0とGPU106が別々のポート、別々の記憶領域にアクセスするため、アクセス競合を回避することができる。また、時刻t4におけるマルチコアプロセッサシステム100は、時刻t3におけるマルチコアプロセッサシステム100と同様に、記憶領域801に記憶されたデータおよび記憶領域1001に記憶されたデータの転送を行わなくてよい。
図12は、アプリシナリオテーブル214の動作に従ったマルチコアプロセッサシステム100における時刻t5の状態を示す説明図である。時刻t5にて、LCDC201に割り当てられた場合、マルチコアプロセッサシステム100は、ポート接続器208にポート113#0の使用を通知し、アドレス変換テーブル404−4をアドレス変換器209に通知する。通知を受けたポート接続器208は、設定レジスタ301#0を使用中に設定する。同じく通知を受けたアドレス変換器209は、変換レジスタ403#0を、アドレス変換テーブル404−4に設定する。また、LCDC201がfuncEの終了後、ポートおよび記憶領域の解放を行う。解放の処理については、図13にて説明を行う。
同様に、時刻t5にて、アプリ#1がCPUs105のうちCPU#0に割り当てられた場合、マルチコアプロセッサシステム100は、ポート接続器208にポート113#1の使用を通知し、アドレス変換テーブル404−5をアドレス変換器209に通知する。通知を受けたポート接続器208は、設定レジスタ301#1を使用中に設定する。同じく通知を受けたアドレス変換器209は、変換レジスタ403#1を、アドレス変換テーブル404−5に設定する。また、アプリシナリオテーブル214_t5はアプリシナリオテーブル214_t4と等しい内容となる。
前述の設定により、時刻t5におけるLCDC201は、アプリ#0のfuncEを実行し、ポート113#0を経由して、メモリブロック210#1内の記憶領域801にアクセスする。また、時刻t5におけるCPU#0は、アプリ#1のfuncHを実行し、ポート113#1を経由して、メモリブロック210#0内の記憶領域1001にアクセスする。このように、マルチコアプロセッサシステム100は、LCDC201とCPU#0が別々のポート、別々の記憶領域にアクセスするため、アクセス競合を回避することができる。また、時刻t5におけるマルチコアプロセッサシステム100は、時刻t4におけるマルチコアプロセッサシステム100と同様に、記憶領域801に記憶されたデータおよび記憶領域1001に記憶されたデータの転送を行わなくてよい。
図13は、アプリシナリオテーブル214の動作に従ったマルチコアプロセッサシステム100における時刻t6の状態を示す説明図である。時刻t5の終了後、アプリ#0が終了すると、マルチコアプロセッサシステム100は、使用ポートとしていたポート113#0の解放をポート接続器208に通知する。通知を受けたポート接続器208は、設定レジスタ301#0を未使用に設定する。さらに、マルチコアプロセッサシステム100は、アプリ#0に割り当てられていた記憶領域801を解放する。
また、時刻t6にて、アプリ#1がLCDC201に割り当てられた場合、マルチコアプロセッサシステム100は、ポート接続器208にポート113#1の使用を通知し、アドレス変換テーブル404−5をアドレス変換器209に通知する。通知を受けたポート接続器208は、設定レジスタ301#1を使用中に設定する。同じく通知を受けたアドレス変換器209は、変換レジスタ403#1を、アドレス変換テーブル404−5に設定する。前述の設定により、時刻t6におけるLCDC201は、アプリ#1のfuncIを実行し、ポート113#1を経由して、メモリブロック210#0内の記憶領域1001にアクセスする。
アプリ#0によるポートと記憶領域の解放後、マルチコアプロセッサシステム100は、解放されたポート113#0、解放された記憶領域801を、アプリシナリオテーブル214から消去する。消去された結果、アプリシナリオテーブル214は、アプリシナリオテーブル214_t6で示す内容となる。
以降、図14〜図19にて、アプリシナリオテーブル214の生成処理と、アプリシナリオテーブル214に応じたメモリ制御処理のフローチャートを示す。アプリシナリオテーブル214の生成処理の実行主体とメモリ制御処理の実行主体は、CPUs105のどのCPUでもよいが、図14〜図19では、説明の簡略化のため、CPU#0が実行すると想定する。なお、アプリシナリオテーブル214は、図14で示す生成処理によって生成されてもよいし、設計者によってあらかじめ生成されていてもよい。
また、アプリシナリオテーブル214の生成処理は対象アプリが起動された場合に実行される。メモリ制御処理は、対象アプリが起動された場合、複数のデバイスのうちいずれか一つとなる対象デバイスにて他のアプリに切り替わった場合、または対象デバイスに割り当てられた対象アプリの関数の処理が終了した場合、のいずれかが発生した場合に実行される。
図14は、アプリシナリオテーブル214の生成処理を示すフローチャートである。CPU#0は、対象アプリが起動したか否かを判断する(ステップS1401)。対象アプリが起動していない場合(ステップS1401:No)、CPU#0は、再びステップS1401の処理に移行する。アプリが起動した場合(ステップS1401:Yes)、CPU#0は、アプリシナリオテーブル214に対象アプリにシナリオ情報が存在するか、またはシナリオ情報無しと登録されているか否かを判断する(ステップS1402)。シナリオ情報が存在する、または、シナリオ情報無しと登録されている場合(ステップS1402:Yes)、CPU#0は、メモリ制御処理を実行する(ステップS1403)。
なお、シナリオ情報が存在する場合とは、アプリシナリオテーブル214に対象アプリの処理実行情報が存在する場合である。したがって、アプリシナリオテーブル214に対象アプリの処理実行情報が存在しない場合、シナリオ情報が存在しないことになる。また、シナリオ情報無しと登録されている場合とは、アプリシナリオテーブル214の対象アプリのシナリオ情報に、無しとして登録されている場合である。
シナリオ情報が存在しない場合(ステップS1402:No)、CPU#0は、対象アプリの関数ごとに、メモリ107へのアクセス回数、処理負荷、デバイスの呼び出し回数を記録する(ステップS1404)。なお、処理負荷とは、対象アプリがデバイスに割り当てられた単位時間当たりの割合でもよいし、あらかじめ、プロファイル等で測定した値であってもよい。
記録後、CPU#0は、メモリ107へのアクセス回数が閾値より大きいか否かを判断する(ステップS1405)。アクセス回数が閾値以下の場合(ステップS1405:No)、CPU#0は、シナリオ情報無しとしてアプリシナリオテーブル214に登録する(ステップS1410)。アクセス回数が閾値より大きい場合(ステップS1405:Yes)、CPU#0は、続けて、処理負荷が閾値より大きいか否かを判断する(ステップS1406)。
処理負荷が閾値以下の場合(ステップS1406:No)、CPU#0は、ステップS1410の処理に移行する。処理負荷が閾値より大きい場合(ステップS1406:Yes)、CPU#0は、さらに、対象アプリの関数が同一のデバイスを複数回呼び出しているか、または、複数のデバイスを呼び出しているか否かを判断する(ステップS1407)。
単一のデバイスに対し1度以下の呼び出ししかしていない場合(ステップS1407:No)、CPU#0は、ステップS1410の処理に移行する。同一のデバイスを複数回、または、複数のデバイスを呼び出している場合(ステップS1407:Yes)、CPU#0は、アプリシナリオテーブル214にシナリオ情報有りとして登録する(ステップS1408)。
続けて、CPU#0は、シナリオ情報テーブル701の対象アプリのレコード内の、順序フィールドに対象の関数が実行される順番を設定し、処理フィールドに対象の関数を設定し、対象デバイスフィールドに呼び出されたデバイスを設定する(ステップS1409)。また、ステップS1403、ステップS1409、またはステップS1410の終了後、CPU#0は、アプリシナリオテーブル214の生成処理を終了する。再び対象アプリが起動された場合、CPU#0は、ステップS1401:Yesのルートを処理する。
なお、ステップS1405、ステップS1406の処理における閾値については、たとえば、単位時間当たりにおける閾値であってもよい。たとえば、対象アプリの実行時間が0.5[秒]であり、ステップS1404にて記録したアクセス回数が700回、ステップS1405における閾値が1000[回/秒]である場合を想定する。このとき、CPU#0は、ステップS1405の処理を、700/0.5=1400>1000から、Yesとみなし、Yesの処理を続行する。CPU#0は、処理負荷についてもアクセス回数と同様に算出する。
図15は、メモリ制御処理を示すフローチャート(その1)である。CPU#0は、イベント発生したか否かを判断する(ステップS1501)。対象アプリ起動イベントが発生した場合(ステップS1501:対象アプリ起動)、CPU#0は、対象アプリのシナリオ情報が有りで登録されているか否かを判断する(ステップS1502)。シナリオ情報が有りで登録されている場合(ステップS1502:Yes)、CPU#0は、シナリオ情報テーブル701に沿って、割当先デバイスを決定する(ステップS1503)。決定後、CPU#0は、割当先デバイスがCPUs105か否かを判断する(ステップS1504)。
割当先デバイスがCPUs105である場合(ステップS1504:Yes)、CPU#0は、負荷最小のCPUを割当先デバイスに決定する(ステップS1505)。割当先デバイスがCPUs105でない場合(ステップS1504:No)、または、負荷最小のCPUを割当先デバイスに決定した場合、CPU#0は、実行中アプリの処理を停止させ、実行中アプリのコンテキストを保存する(ステップS1506)。なお、コンテキストとは、CPUのレジスタの値となるプログラムカウンタ、スタックポインタなどといったアプリが使用するデータである。
また、シナリオ情報が存在しない、または、シナリオ情報が無しと登録されている場合(ステップS1502:No)、CPU#0は、負荷最小のCPUを割当先デバイスに決定する(ステップS1507)。決定後、CPU#0は、実行中アプリの処理を停止させ、実行中アプリのコンテキストを保存する(ステップS1508)。
ステップS1506の終了後、CPU#0は、シナリオ情報が有るアプリ用のポートの中に未使用のポートが存在するか否かを判断する(ステップS1509)。なお、未使用のポートが存在するか否かの判断方法として、たとえば、CPU#0がアプリシナリオテーブル214に登録された使用ポートを確認することで、未使用のポートが存在するか否か判断することができる。未使用のポートが存在する場合(ステップS1509:Yes)、CPU#0は、図16に示すステップS1601の処理に移行する。未使用のポートが存在しない場合(ステップS1509:No)、または、ステップS1508の処理を終了後、CPU#0は、図16に示すステップS1606の処理に移行する。
また、アプリ切り替えイベントが発生した場合(ステップS1501:アプリ切り替え)、CPU#0は、図17に示すステップS1701の処理に移行する。同様に、対象アプリ内の関数の処理終了イベントが発生した場合(ステップS1501:アプリ内関数処理終了)、CPU#0は、図18に示すステップS1801の処理に移行する。イベントが発生していない場合(ステップS1501:イベント未発生)、CPU#0は、再びステップS1501の処理に移行する。
図16は、メモリ制御処理を示すフローチャート(その2)である。ステップS1509:Yesの処理を終了後、CPU#0は、ポート接続器208に空きポートの割当を通知する(ステップS1601)。通知を受けたポート接続器208は、通知されたポートに対応する設定レジスタ301を使用中に設定し(ステップS1602)、通知元に完了通知を送信する(ステップS1603)。完了通知を受けたCPU#0は、割り当てたポートの識別情報をアプリシナリオテーブル214に登録する(ステップS1604)。登録後、CPU#0は、シナリオ情報が有るアプリ用の記憶領域から、空き記憶領域を割り当てる(ステップS1605)。
ステップS1509:No、またはステップS1508の処理を終了後、CPU#0は、ポート接続器208にシナリオ情報が無いアプリ用のポートの割当を通知する(ステップS1606)。なお、ステップS1606の処理後、ポート接続器208がステップS1602、ステップS1603を実行するが、ポート接続器208で実行される処理が同一であるため、ここでは省略している。通知後、CPU#0は、シナリオ情報が無いアプリ用の記憶領域から、空き記憶領域を割り当てる(ステップS1607)。
ステップS1605、または、ステップS1607の処理を終了後、CPU#0は、割り当てた記憶領域の先頭アドレスをアプリシナリオテーブル214に登録する(ステップS1608)。登録後、CPU#0は、アドレス変換器209に、割り当てた記憶領域の物理アドレスを論理アドレスに変換するアドレス変換テーブルを通知する(ステップS1609)。なお、通知内容には、割り当てられたポートの識別情報も含まれる。
通知を受けたアドレス変換器209は、アドレス変換テーブルを、割り当てられたポートに対応する変換レジスタ403に設定し(ステップS1610)、通知元に完了通知を送信する(ステップS1611)。完了通知を受けたCPU#0は、対象アプリの実行開始を割当先デバイスに通知し(ステップS1612)、ステップS1501の処理に移行する。
図17は、メモリ制御処理を示すフローチャート(その3)である。特定のデバイスにてアプリ切り替えイベントが発生した場合(ステップS1501:アプリ切り替え)、CPU#0は、切り替え後に実行されるアプリのシナリオ情報が有りで登録されているか否かを判断する(ステップS1701)。シナリオ情報が存在しない、またはシナリオ情報が無しで登録されている場合(ステップS1701:No)、CPU#0は、シナリオ情報が無いアプリ用のポートを割り当てる(ステップS1702)。
割当後、または切り替え後に実行されるアプリのシナリオ情報が有りで登録されている場合(ステップS1701:Yes)、CPU#0は、切り替え後に実行するアプリの接続ポートをポート接続器208に通知する(ステップS1703)。通知後、CPU#0は、実行キューに格納されている切り替え後に実行されるアプリのアドレス変換テーブルをアドレス変換器209に通知する(ステップS1704)。なお、実行キューとは、各デバイスに割り当てられた実行待ちのアプリ群が格納されたキューである。
また、ステップS1703にて、図16で示したポート接続器208がステップS1602、ステップS1603の処理を実行するが、ポート接続器208で実行される処理が同一であるため、図17では省略している。ステップS1704の処理後に実行されるアドレス変換器209も同様に、処理が図16と同一であるため、図17では省略している。通知後、CPU#0は、切り替え後に実行されるアプリの実行を対象デバイスに通知し(ステップS1705)、ステップS1501の処理に移行する。
図18は、メモリ制御処理を示すフローチャート(その4)である。特定のデバイスにてアプリ内の関数処理終了イベントが発生した場合(ステップS1501:アプリ内関数処理終了)、CPU#0は、シナリオ情報が有りで登録されているかを判断する(ステップS1801)。シナリオ情報が存在しない、またはシナリオ情報が無しで登録されている場合(ステップS1801:No)、CPU#0は、図19に示すステップS1905の処理に移行する。シナリオ情報が有りで登録されている場合(ステップS1801:Yes)、CPU#0は、シナリオ情報テーブルの終了した関数のレコードに、続きのレコードが存在するか否かを判断する(ステップS1802)。
続きのレコードが存在する場合(ステップS1802:Yes)、CPU#0は、シナリオ情報テーブル701に沿って、続きのレコードの対象デバイスフィールドに格納されたデバイスを割当先デバイスに決定する(ステップS1803)。決定後、CPU#0は、割当先デバイスの実行キューに、対象アプリを格納する(ステップS1804)。格納後、CPU#0は、図19に示すステップS1901の処理に移行する。
続きのレコードが存在しない場合(ステップS1802:No)、CPU#0は、ポート接続器208に、占有していたポートの解放を通知する(ステップS1805)。通知を受けたポート接続器208は、通知されたポートを未使用に設定し(ステップS1806)、通知元に完了通知を送信する(ステップS1807)。完了通知を受けたCPU#0は、解放したポートの識別情報をアプリシナリオテーブル214から消去する(ステップS1808)。続けて、CPU#0は、占有していた記憶領域を解放し(ステップS1809)、解放した記憶領域の先頭アドレスをアプリシナリオテーブル214から消去する(ステップS1810)。消去後、CPU#0は、図19に示すステップS1901の処理に移行する。
図19は、メモリ制御処理を示すフローチャート(その5)である。ステップS1804、またはステップS1810の処理終了後、CPU#0は、対象デバイスの実行キューに実行待ちアプリが存在するか否かを判断する(ステップS1901)。実行待ちアプリが存在しない場合(ステップS1901:No)、CPU#0は、ステップS1501の処理に移行する。
実行待ちアプリが存在する場合(ステップS1901:Yes)、CPU#0は、次に実行されるアプリの接続ポートをポート接続器208に通知する(ステップS1902)。なお、次に実行されるアプリとは、実行キューに格納されているアプリのうち、いずれかのアプリである。たとえば、CPU#0は、実行キューの先頭に格納されているアプリを次に実行されるアプリとして決定してもよい。
通知後、CPU#0は、次に実行されるアプリのアドレス変換テーブルをアドレス変換器209に通知する(ステップS1903)。なお、ステップS1902、ステップS1903以降に処理されるポート接続器208、アドレス変換器209の処理は、図16と同一であるため、図19では省略している。通知後、CPU#0は、次に実行されるアプリの実行を対象デバイスに通知し(ステップS1904)、ステップS1501の処理に移行する。
シナリオ情報が存在しない、またはシナリオ情報が無しで登録されている場合(ステップS1801:No)、CPU#0は、占有していた記憶領域を解放する(ステップS1905)。解放後、CPU#0は、解放した記憶領域の先頭アドレスをアプリシナリオテーブル214から消去する(ステップS1906)。消去後、CPU#0は、対象デバイスの実行キューに実行待ちアプリが存在するか否かを判断する(ステップS1907)。
実行待ちアプリが存在する場合(ステップS1907:Yes)、CPU#0は、次に実行されるアプリの実行を対象デバイスに通知する(ステップS1908)。通知後、または実行待ちアプリが存在しない場合(ステップS1907:No)、CPU#0は、ステップS1501の処理に移行する。
以上説明したように、メモリ制御方法、およびシステムによれば、複数のポートを有するメモリに対して、アプリの割当先デバイスが処理を実行する際に、アプリ占有のポートを介して各アプリの記憶領域にアクセスするようにメモリコントローラを制御する。これにより、システムは、各デバイスが別々のポートを経由してメモリにアクセスするため、アクセス競合を回避できる。
また、システムは、対象アプリの処理が複数ある場合、複数の処理のうち特定の処理が終了後、次の処理を実行するデバイスを割当先デバイスに決定し、割当先デバイスに、アプリ占有のポートと記憶領域をアクセスするようにメモリコントローラを制御してもよい。従来例にかかるシステムでは、デバイス間で連携動作を行う場合、各デバイスが管理する記憶領域が異なれば、アクセス競合を回避することができる。しかし、記憶領域が異なる場合、記憶領域間のコピー処理が発生するという問題があった。本実施の形態にかかるシステムは、決定前の割当先デバイスが管理する記憶領域と決定後の割当先デバイスが管理する記憶領域間でのコピー処理を回避することができる。
また、システムは、対象アプリが占有するポートおよび記憶領域をテーブルに登録してもよい。これにより、システムは、他のアプリがポートを占有する場合に、テーブルを参照して既に対象アプリが占有しているポートを除いたポートに割り当てることができ、アクセス競合を回避することができる。
また、システムは、対象アプリがテーブルに登録されていないとき、対象アプリを負荷が最小であるデバイスに割り当ててもよい。これにより、システムは、各デバイス間の負荷を均等に近づけることができる。
また、システムは、対象アプリのシナリオ情報がテーブルに登録されている場合、シナリオ情報が有るアプリ用となる第1ポートを対象アプリに割り当ててもよい。また、システムは、対象アプリのシナリオ情報がテーブルに登録されていない場合、シナリオ情報が無いアプリ用となる第2ポートを対象アプリに割り当ててもよい。同様に、記憶領域においても、システムは、シナリオ情報がテーブルに登録されている場合、シナリオ情報が有るアプリ用となる第1記憶領域を対象アプリに割り当ててもよい。また、システムは、シナリオ情報がテーブルに登録されていない場合、シナリオ情報が無いアプリ用となる第2記憶領域を対象アプリに割り当ててもよい。
たとえば、システムは、第1ポートに割り当てるアプリとして、頻繁にメモリにアクセスする処理を含むアプリや、複数のデバイス間でデータをコピーする処理を含むアプリを対象とする。これにより、システムは、アクセス競合およびデバイス間のデータコピーが発生しないアプリで全てのポートが占有されてしまうことを回避できる。また、システムは、アクセス競合またはデバイス間のデータコピーが発生するアプリが起動された際に、第1ポートのうち未使用のポートを割り当てることができる。
また、システムは、シナリオ情報が有るアプリが起動された場合に、未使用の第1ポートが存在するか否かを判断し、未使用ポートが存在しない場合、第2ポートをシナリオ情報が有るアプリに割り当ててもよい。これにより、システムは、第1ポートが全て使用中となった場合でも、シナリオ情報が有るアプリを実行開始することができる。
また、システムは、デバイスがアクセスする論理アドレスと記憶領域の物理アドレスを変換するアドレス変換テーブルをアドレス変換器に通知してもよい。これにより、対象アプリは、記憶領域がメモリのどの領域に設定されても、常に同一の論理アドレスで実行することができる。
また、システムは、対象デバイスに割り当てられたアプリが切り替わるとき、テーブルから切替後のアプリに対応するポートの識別情報を取得して、メモリコントローラ内のポート接続器に通知してもよい。これにより、システムは、切り替え後のアプリに関するコピー処理を回避することができる。
また、システムは、対象デバイスに割り当てられたアプリが終了するとき、テーブルに登録されたポートの識別情報および記憶領域のアドレスを消去してもよい。これにより、システムは、一度使用されたポートおよび記憶領域を、別のアプリが使用するポートおよび記憶領域として割り当てることができる。
また、システムは、対象アプリを実行中に、メモリのアクセス回数およびデバイスの使用回数を記録し、アクセス回数、使用回数、および対象アプリの処理負荷に基づいて、対象アプリのシナリオ情報をテーブルに登録してもよい。これにより、システムは、シナリオ情報が存在しないアプリであっても、アクセス競合またはデバイス間のコピー処理が発生する場合、次の起動からは占有のポートを割り当てることができ、アクセス競合またはデバイス間のコピー処理を回避することができる。たとえば、システムは、ユーザがネットワークを経由してダウンロードしたアプリ等に対して適用することができる。
なお、本実施の形態にかかるメモリコントローラのポート数は、最大でもデバイスの個数でよい。本実施の形態にかかるシステムは、メモリコントローラのポート数分、アプリを同時実行することができる。また、本実施の形態にかかるメモリ制御方法は、ソフトウェアによるメモリ制御を行うため、製造コストを抑えることができる。特許文献1にかかる技術では、メモリコントローラを複数搭載するために、製造コストが増大してしまっていた。また、本実施の形態にかかるシステムは、メモリアクセス競合を回避することにより、従来例にかかるシステムに比べて50%程度の性能向上を見込むことができる。
なお、本実施の形態で説明したメモリ制御方法は、あらかじめ用意されたプログラムをパーソナル・コンピュータやワークステーション等のコンピュータで実行することにより実現することができる。本メモリ制御方法を実行するプログラムは、ハードディスク、フレキシブルディスク、CD−ROM、MO、DVD等のコンピュータで読み取り可能な記録媒体に記録され、コンピュータによって記録媒体から読み出されることによって実行される。また本メモリ制御方法を実行するプログラムは、インターネット等のネットワークを介して配布してもよい。
#0、#1 CPU、アプリ
100 マルチコアプロセッサシステム
104 DBB
105 CPUs
106 GPU
107 メモリ
108 バス
113 ポート
114 ポート
201 LCDC
208 ポート接続器
209 アドレス変換器
214 アプリシナリオテーブル
215 記憶領域
301 設定レジスタ
403 変換レジスタ
404 アドレス変換テーブル
501 検出部
502 割当部
503 決定部
504 制御部
505 登録部

Claims (13)

  1. 複数のポートを有するメモリと、複数のデバイスと、前記複数のデバイスによる前記複数のポートへの接続を制御するポート接続器とを有するシステムのメモリ制御方法であって、前記複数のデバイスのうちのいずれかのデバイスが、
    第1アプリケーションソフトウェア(以下、アプリケーションと称す)内のパイプライン処理される複数の処理の各処理を実行する割当先デバイスを登録するテーブルに基づいて前記複数の処理のうちの第1処理を、前記第1処理を実行する割当先デバイスに割り当て、
    前記複数のポートのうちの前記複数の処理で使用されるメモリのポートの識別情報を前記ポート接続器に通知するとともに前記ポートの識別情報前記テーブルに登録し、
    前記ポートに前記複数の処理で使用される記憶領域を割り当てるとともに前記記憶領域のアドレスを前記テーブルに登録する
    処理を実行することを特徴とするメモリ制御方法。
  2. 前記いずれかのデバイスが、
    前記第1アプリケーション内の前記第1処理を実行する前記割当先デバイスが前記テーブルに登録されていないとき、前記第1アプリケーション負荷が最小であるデバイスに割り当てること
    を特徴とする請求項1に記載のメモリ制御方法。
  3. 前記複数のポートは、前記割当先デバイスが前記テーブルに登録される前記第1アプリケーションに割り当てられる第1ポートと、前記割当先デバイスが前記テーブルに登録されない前記第1アプリケーションに割り当てられる第2ポートとを含むこと
    を特徴とする請求項1または請求項2に記載のメモリ制御方法。
  4. 前記いずれかのデバイスが、
    使用されていない前記第1ポートが存在するか否か判断
    使用されていない前記第1ポートが存在する場合には、前記第1ポートの識別情報を前記ポート接続器に通知
    使用されていない前記第1ポートが存在しない場合には、前記第2ポートの識別情報を前記ポート接続器に通知すること
    を特徴とする請求項に記載のメモリ制御方法。
  5. 前記いずれかのデバイスが、
    前記割当先デバイスがアクセスするアドレスと前記記憶領域のアドレスとを変換するアドレス変換テーブルをアドレス変換器に通知すること
    を特徴とする請求項1乃至請求項4の何れか一に記載のメモリ制御方法。
  6. 前記いずれかのデバイスが、
    前記第1アプリケーションが第2アプリケーションに切り替わるとき、前記テーブルから前記第2アプリケーションに対応するポートの識別情報を取得して前記ポート接続器に通知すること
    を特徴とする請求項1乃至請求項5の何れか一に記載のメモリ制御方法。
  7. 前記いずれかのデバイスが、
    前記第1アプリケーション内の前記第1処理が終了するとき、前記テーブルに登録された前記ポートの識別情報および前記アドレスを消去すること
    を特徴とする請求項1乃至請求項6の何れか一に記載のメモリ制御方法。
  8. 前記いずれかのデバイスが、
    前記第1アプリケーション内の第1処理が終了するとき、前記テーブルに前記第1処理に続く第2処理が登録されるときは前記テーブルに基づいて前記第2処理に対応する割当先デバイスに割り当てること
    を特徴とする請求項1乃至請求項7の何れか一に記載のメモリ制御方法。
  9. 前記いずれかのデバイスが、
    前記第1アプリケーションを実行中に、前記メモリのアクセス回数および第1デバイスの使用回数を記録し、
    前記アクセス回数、前記使用回数、および前記第1アプリケーションの処理負荷に基づいて前記第1アプリケーションを前記テーブルに登録するか否かを決定すること
    を特徴とする請求項1乃至請求項8の何れか一に記載のメモリ制御方法。
  10. アプリケーション内のパイプライン処理を行う複数の処理の各処理を実行する割当先デバイスを登録するテーブルと、
    前記テーブルに基づいて前記アプリケーション内の前記処理に割り当てられた前記割当先デバイスとメモリとの間で使用される前記メモリのポートの識別情報が通知されるポート接続器と、
    複数のポートを有し、前記複数のポートのうちのポートに割り当てられる前記複数の処理で使用される記憶領域を有する前記メモリと、
    前記割当先デバイスがアクセスするアドレスと前記記憶領域のアドレスとを変換するアドレス変換テーブルと、
    を含むことを特徴とするシステム。
  11. 前記ポートの識別情報と前記アドレスとが前記テーブルに登録されること
    を特徴とする請求項10に記載のシステム。
  12. 前記複数のポートは、前記割当先デバイスが前記テーブルに登録される第1アプリケーションに割り当てられる第1ポートと、前記割当先デバイスが前記テーブルに登録されない第1アプリケーションに割り当てられる第2ポートとを含むこと
    を特徴とする請求項10または請求項11に記載のシステム。
  13. 前記記憶領域は、前記割当先デバイスが前記テーブルに登録されるアプリケーションに割り当てられる第1記憶領域と、前記割当先デバイスが前記テーブルに登録されないアプリケーションに割り当てられる第2記憶領域とを含むこと
    を特徴とする請求項10乃至請求項12の何れか一に記載のシステム。
JP2012554532A 2011-01-25 2011-01-25 メモリ制御方法、およびシステム Expired - Fee Related JP5621856B2 (ja)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
PCT/JP2011/051354 WO2012101760A1 (ja) 2011-01-25 2011-01-25 メモリ制御方法、およびシステム

Publications (2)

Publication Number Publication Date
JPWO2012101760A1 JPWO2012101760A1 (ja) 2014-06-30
JP5621856B2 true JP5621856B2 (ja) 2014-11-12

Family

ID=46580367

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2012554532A Expired - Fee Related JP5621856B2 (ja) 2011-01-25 2011-01-25 メモリ制御方法、およびシステム

Country Status (4)

Country Link
US (1) US9384797B2 (ja)
EP (1) EP2669805A4 (ja)
JP (1) JP5621856B2 (ja)
WO (1) WO2012101760A1 (ja)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP6042170B2 (ja) * 2012-10-19 2016-12-14 ルネサスエレクトロニクス株式会社 キャッシュ制御装置及びキャッシュ制御方法
US20150228106A1 (en) * 2014-02-13 2015-08-13 Vixs Systems Inc. Low latency video texture mapping via tight integration of codec engine with 3d graphics engine

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH11194954A (ja) * 1998-01-05 1999-07-21 Nec Kofu Ltd Mmuにおけるメモリアクセス競合調停回路の機能試験方式
JP2003084991A (ja) * 2001-09-10 2003-03-20 Fujitsu Ltd メモリ管理方法
JP2006350622A (ja) * 2005-06-15 2006-12-28 Seiko Epson Corp マルチプロセッサシステム
JP2010097311A (ja) * 2008-10-15 2010-04-30 Panasonic Corp 半導体装置及び半導体集積回路
JP2010152733A (ja) * 2008-12-25 2010-07-08 Fujitsu Semiconductor Ltd マルチコアシステム

Family Cites Families (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
DE602004013977D1 (de) * 2003-07-02 2008-07-03 Nxp Bv Einzelspeicher mit mehrfach-schieberegisterfunktionalität
JP4455137B2 (ja) * 2004-04-20 2010-04-21 株式会社日立製作所 記憶サブシステム管理方法
JP5379956B2 (ja) * 2007-03-19 2013-12-25 株式会社日立製作所 ストレージ装置及び記憶領域配置方法
KR100934227B1 (ko) * 2007-09-21 2009-12-29 한국전자통신연구원 개방형 시리얼 정합 방식을 이용한 메모리 스위칭 컨트롤장치, 그의 동작 방법 및 이에 적용되는 데이터 저장 장치

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH11194954A (ja) * 1998-01-05 1999-07-21 Nec Kofu Ltd Mmuにおけるメモリアクセス競合調停回路の機能試験方式
JP2003084991A (ja) * 2001-09-10 2003-03-20 Fujitsu Ltd メモリ管理方法
JP2006350622A (ja) * 2005-06-15 2006-12-28 Seiko Epson Corp マルチプロセッサシステム
JP2010097311A (ja) * 2008-10-15 2010-04-30 Panasonic Corp 半導体装置及び半導体集積回路
JP2010152733A (ja) * 2008-12-25 2010-07-08 Fujitsu Semiconductor Ltd マルチコアシステム

Also Published As

Publication number Publication date
WO2012101760A1 (ja) 2012-08-02
JPWO2012101760A1 (ja) 2014-06-30
EP2669805A4 (en) 2016-08-31
EP2669805A1 (en) 2013-12-04
US9384797B2 (en) 2016-07-05
US20130311727A1 (en) 2013-11-21

Similar Documents

Publication Publication Date Title
US8566832B1 (en) Power optimization for multi-core devices having a shared memory manager
WO2012093488A1 (ja) スケジューリング方法、およびマルチコアプロセッサシステム
WO2019109023A1 (en) Provisioning using pre-fetched data in serverless computing environments
US20130191832A1 (en) Management of threads within a computing environment
JP2008276341A (ja) ストレージ装置およびストレージ装置の省電力制御方法
JP2016541072A (ja) リソース処理方法、オペレーティング・システム、およびデバイス
WO2012127589A1 (ja) マルチコアプロセッサシステム、および分岐予測方法
TW201510742A (zh) 分散式作業系統
CN112306389A (zh) 存储系统和节点管理方法
WO2021027875A1 (zh) 多窗口并行方法及装置、终端和存储介质
US20180260257A1 (en) Pld management method and pld management system
WO2011104823A1 (ja) マルチコアプロセッサシステム、スレッド制御方法、およびスレッド制御プログラム
JP5621856B2 (ja) メモリ制御方法、およびシステム
WO2011155047A1 (ja) マルチコアプロセッサシステム、電力制御方法、および電力制御プログラム
US20150194198A1 (en) Multi-core processor system, memory controller control method, and computer product
JP5861715B2 (ja) データ処理装置、送信装置、スケジューリング方法、送信制御方法、スケジューリングプログラム、および送信制御プログラム
JP5708450B2 (ja) マルチコアプロセッサシステム、レジスタ利用方法、およびレジスタ利用プログラム
JP5967073B2 (ja) プロセッサ管理方法
JP5780296B2 (ja) スレッド処理方法、およびスレッド処理システム
JP5545376B2 (ja) マルチコアプロセッサシステム、および電力制御方法
JP2015191604A (ja) 制御装置、制御プログラム、および制御方法
JP5776776B2 (ja) データ処理システム、およびデータ処理方法
US9734104B2 (en) Data transfer control apparatus, data transfer control method, and computer product
KR100978083B1 (ko) 공유 메모리형 멀티 프로세서에 있어서의 절차 호출 방법 및 절차 호출 프로그램을 기록한 컴퓨터로 판독 가능한 기록 매체
JPWO2012144013A1 (ja) スケジューリング方法およびタスク処理方法

Legal Events

Date Code Title Description
A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20140512

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: 20140826

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20140908

R150 Certificate of patent or registration of utility model

Ref document number: 5621856

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

LAPS Cancellation because of no payment of annual fees