JP2009059276A - 情報処理装置およびプログラム - Google Patents
情報処理装置およびプログラム Download PDFInfo
- Publication number
- JP2009059276A JP2009059276A JP2007227678A JP2007227678A JP2009059276A JP 2009059276 A JP2009059276 A JP 2009059276A JP 2007227678 A JP2007227678 A JP 2007227678A JP 2007227678 A JP2007227678 A JP 2007227678A JP 2009059276 A JP2009059276 A JP 2009059276A
- Authority
- JP
- Japan
- Prior art keywords
- transfer
- dma
- transfer information
- data
- information
- 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.)
- Pending
Links
Images
Landscapes
- Bus Control (AREA)
Abstract
【課題】転送情報を複数連ねて構成された転送情報群に基づいて転送対象のデータのDMA転送を行なう際に、転送情報群を構成する転送情報の数を常に一定とする場合に比べて、DMA転送を高速且つ効率よく行なう情報処理装置およびプログラムを提供する。
【解決手段】CPU24を介在させないダイレクトメモリアクセス(DMA)転送に必要な情報を含む単位転送量毎の転送情報を複数連ねて構成した転送情報群に基づいて転送対象のデータを単位転送量毎にDMA転送するDMAコントローラ42が設けられた情報処理部13において、データ量が予め定められた基準データを転送情報群を構成する転送情報の個数を変化させながらDMAコントローラ42によって転送したときの転送速度に基づいて転送情報群を構成する転送情報の数を決定し、転送対象のデータをDMA転送するときには、該決定された数の転送情報を連ねて構成した転送情報群を作成する。
【選択図】図1
【解決手段】CPU24を介在させないダイレクトメモリアクセス(DMA)転送に必要な情報を含む単位転送量毎の転送情報を複数連ねて構成した転送情報群に基づいて転送対象のデータを単位転送量毎にDMA転送するDMAコントローラ42が設けられた情報処理部13において、データ量が予め定められた基準データを転送情報群を構成する転送情報の個数を変化させながらDMAコントローラ42によって転送したときの転送速度に基づいて転送情報群を構成する転送情報の数を決定し、転送対象のデータをDMA転送するときには、該決定された数の転送情報を連ねて構成した転送情報群を作成する。
【選択図】図1
Description
本発明は、情報処理装置およびプログラムに関する。
近年、データの転送を高速に行なうため、中央演算処理装置(CPU)を介さずにデータの転送を行なうダイレクトメモリアクセス(DMA)転送の技術が様々な情報処理装置に広く採用されている。
DMA転送を効率的に行なうために、画像形成装置において、メモリ上のイメージデータをDMAにより高速に印刷エンジンに転送するために、各ページのイメージデータを複数バンドに分割し、各バンドデータを1回のDMAで転送すると共に、CPUがDMA転送毎に連続DMA転送を行なうか否かを示す転送フラグを設定して連続転送を制御し、連続転送する場合には、DMA動作中に次のバンドのDMAパラメータ(アドレス、サイズ等)を設定することで、複数バンドのDMAがインターバルなく連続的に実行されるような技術が提案されている(例えば、特許文献1参照)。
また、画像データを複数に分割し、それぞれの分割部分ごとのディスクリプタを作成し、そのディスクリプタにDMAコントローラの行う動作を指示する指示ビットを含めることで、CPUの介在なしで、分割DMA転送を連続的に行なうことができる装置も提案されている(例えば、特許文献2参照)。
特開2000−148663公報
特開2002−140286公報
本発明は、転送情報を複数連ねて構成された転送情報群に基づいて転送対象のデータのDMA転送を行なうための情報処理装置およびプログラムであって、転送情報群を構成する転送情報の数を常に一定とする場合に比べて、DMA転送を高速且つ効率よく行なうことができる情報処理装置およびプログラムを提供することを目的とする。
請求項1の発明の情報処理装置は、中央演算処理装置(CPU)を介在させないダイレクトメモリアクセス(DMA)転送に必要な情報を含む単位転送量毎の転送情報を複数連ねて構成した転送情報群に基づいて転送対象のデータを前記単位転送量毎にDMA転送する転送手段と、データ量が予め定められた基準データを前記転送情報群を構成する転送情報の個数を変化させながら前記転送手段によってDMA転送したときの転送速度に基づいて前記転送情報群を構成する転送情報の数を決定する決定手段と、転送対象のデータをDMA転送するときに、前記決定手段で決定された数の転送情報を連ねて構成した転送情報群を作成する作成手段と、を含んで構成されている。
請求項2の発明は、請求項1に記載の情報処理装置において、前記決定手段で決定された転送情報の数を基準データのデータ量に対応付けて記憶した記憶手段を更に備え、前記作成手段は、転送対象のデータをDMA転送するときに、該転送対象のデータ量に応じて前記記憶手段に記憶された数を読み出し、該読み出した数の転送情報を連ねて構成した転送情報群を作成する。
請求項3の発明は、請求項1または2に記載の情報処理装置において、前記作成手段は、前記転送対象のデータをDMA転送するために複数の転送情報群を作成する場合に、先頭の転送情報群または先頭から所定数までの転送情報群については、前記決定手段で決定された数よりも少ない数の転送情報で構成された転送情報群を作成し、それ以降の転送情報群については、前記決定手段で決定された数の転送情報を構成した転送情報群を作成する。
請求項4の発明は、請求項1〜3の何れか1項に記載の情報処理装置において、前記作成手段は、前記転送対象のデータをDMA転送するために複数の転送情報群を作成する場合に、前記転送手段で実行中のDMA転送が終了するまでに該実行中のDMA転送以降に行なわれるDMA転送のための転送情報群を作成して作成順に転送情報用記憶手段に記憶し、前記転送手段は、前記転送情報用記憶手段から前記作成順に転送情報群を読み出してDMA転送を行なう。
請求項5の発明は、請求項4に記載の情報処理装置において、前記作成手段は、前記転送情報群の作成をCPU使用率またはCPU占有時間が所定値を超えていない場合に行なう。
請求項6の発明は、請求項5に記載の情報処理装置において、前記作成手段は、前記転送情報用記憶手段に未読の転送情報群が1つも記憶されていない場合には、前記CPU使用率またはCPU占有時間が所定値を超えている場合であっても実行中のDMA転送以降に行なわれるDMA転送のための転送情報群を作成する。
請求項7の発明のプログラムは、中央演算処理装置(CPU)を介在させないダイレクトメモリアクセス(DMA)転送に必要な情報を含む単位転送量毎の転送情報を複数連ねて構成した転送情報群に基づいて転送対象のデータを前記単位転送量毎にDMA転送する転送手段が設けられたコンピュータを、データ量が予め定められた基準データを前記転送情報群を構成する転送情報の個数を変化させながら前記転送手段によってDMA転送したときの転送速度に基づいて前記転送情報群を構成する転送情報の数を決定する決定手段、および転送対象のデータをDMA転送するときに、前記決定手段で決定された数の転送情報を連ねて構成した転送情報群を作成する作成手段、として機能させるためのプログラムである。
請求項1記載の発明によれば、転送情報群を構成する転送情報の数を常に一定とする場合に比べて、DMA転送を高速且つ効率よく行なうことができる、という効果が得られる。
請求項2記載の発明によれば、迅速に転送情報群を作成することができる、という効果が得られる。
請求項3記載の発明によれば、転送手段のDMA転送開始を早めることができる、という効果が得られる。
請求項4記載の発明によれば、DMAの転送開始前に全ての転送情報群を作成する場合に比べてDMA転送にかかる時間を短縮することができる、という効果が得られる。
請求項5記載の発明によれば、CPUの負荷がシステム全体でみた場合に集中しないよう効率よくCPUを使用することができ、これにより他のモジュールの性能低下を招くことなくDMA転送できる、という効果が得られる。
請求項6記載の発明によれば、DMA転送が途切れることを防止することができる、という効果が得られる。
請求項7記載の発明によれば、転送情報群を構成する転送情報の数を常に一定とする場合に比べて、DMA転送を高速且つ効率よく行なうことができる、という効果が得られる。
以下、図面を参照して本発明の実施の形態を詳細に説明する。
図1は、本発明の情報処理装置に係る実施の形態としての情報処理部を含む画像処理システム10の構成例を示す図である。
画像処理システム10は、マザーボード12及びコントローラボード14を備えた情報処理部13、画像入力部16、画像出力部18、コントローラ20、及びLCD(液晶ディスプレイ)22を備えている。
マザーボード12は、CPU(中央演算処理装置)24および主記憶としてのメモリ28を備えている。CPU24及びメモリ28はハブ26を介して専用のバスにより接続されている。このメモリ28には、画像出力部18で出力(印刷)する画像データや画像入力部16で読み取った画像データを格納するための領域があり、該画像データは後述するコントローラボード14に設けられたメモリ44との間でCPU24の介在無しにDMA(ダイレクトメモリアクセス)転送される。
また、ハブ26には、マザーボード12の外部に設けられたLCD22が接続されている。LCD22は、表示面にタッチパネルを有する液晶表示装置であり、ユーザインタフェースとして機能する。
また、専用のバスを接続するためのハブ26は、汎用バスを接続するためのハブ30と接続されている。ハブ30にはHDD(ハードディスク装置)32とI/Oポート34とが汎用バスを介して接続されている。HDD32には、CPU24が実行するプログラムや各種データが記憶されている。I/Oポート34は、入出力インタフェースとして機能し、画像処理システム10の周辺機器などが接続される。
なお、CPU24が実行するプログラムや各種データを記録する記録媒体は、HDDに限定されず、不図示のCD−ROMやDVDディスク、光磁気ディスクやICカード、あるいはROM等であってもよいし、電気通信回線上の搬送波のような伝送媒体であってもよく、特に限定されない。
マザーボード12には汎用バスのインタフェース36が設けられ、同じくコントローラボード14に設けられた汎用バスのインタフェース38と接続されている。
コントローラボード14は、バスブリッジ40、メモリ44、論理回路46、CPU48、及び画像処理回路50を備えている。バスブリッジ40、メモリ44、CPU48、及び画像処理回路50は、論理回路46に接続され、論理回路46を介して互いにデータのやりとりを行なう。論理回路46は、データ転送回路としてプログラムされた回路であるが、単にデータを受け渡すのみでありデータ転送の制御を行なうわけではない。画像処理回路50は、入力された画像データに所定の画像処理を施す回路である。
バスブリッジ40は、汎用バスを介してインタフェース38に接続されると共に、論理回路46に接続されている。バスブリッジ40は、汎用バス同士のブリッジ機能やバスマスタ機能を備えている。このバスマスタ機能は、コントローラボード14上のCPU48を介さずにメモリ44と画像処理回路50との間でデータのやりとりを行なうための機能である。具体的には、コントローラボード14では、画像出力部18による画像出力時には、画像データがメモリ44から論理回路46を介して画像処理回路50へDMA転送され、画像入力部16によって画像が読み込まれた場合には、該読み込まれて得られた画像データが画像処理回路50から論理回路46を介してメモリ44へDMA転送される。
一方、マザーボード12上のCPU24を介さずに、マザーボード12上のメモリ28とコントローラボード14上のメモリ44との間でデータの転送を行なうDMA機能は、上記バスブリッジ40のバスマスタ機能とは別に、バスブリッジ40に設けられたDMAC(DMAコントローラ)42により実現される。DMAC42は、飛び飛びのアドレスに対して、連続してデータを転送できるスキャッタギャザー機能が搭載された回路である。DMAC42の詳細な動作については後述する。
コントローラボード14に設けられているコネクタ52は、画像入力部16及び画像出力部18を制御する制御機構を備えたコントローラ20に設けられているコネクタ56に接続されている。また、コントローラボード14のコネクタ52は、前述の画像処理回路50に接続されている。画像処理回路50で画像処理が施される画像データは、コネクタ52及びコネクタ56を介して送受信される。
また、コントローラボード14にはコネクタ52とは別のコネクタ54が設けられている。このコネクタ54は、論理回路46に直接接続されると共に、コントローラ20に設けられているコネクタ58と接続されている。コントローラ20とコントローラボード14との間で制御データやメッセージの送受信は、これらコネクタ54、コネクタ58を介して行なわれる。
ここで、DMAC42の機能について説明する。画像処理システム10では、データ量の多い画像データを取り扱う。従って、システム内で画像データを転送する場合には、CPU24を介在させないDMA転送が用いられる。DMAC42は、CPU24により作成されたディスクリプタに基づいてDMA転送を行なう。
なお、ディスクリプタとは、DMA転送のために必要な情報を含む転送情報をいう。CPU24は、ディスクリプタを予め定められた単位転送量毎に作成し、該作成したディスクリプタを複数連ねてディスクリプタリストを作成する。本実施の形態では、ディスクリプタリストはメモリ28に設けられたディスクリプタ格納領域に格納されると共にその格納アドレスはFIFO方式のディスクリプタリスト管理キューに登録される。なお、ディスクリプタリストの格納領域は、メモリ28に限定されず、コントローラボード14のメモリ44であってもよいし特に限定されない。
CPU24は、ディスクリプタリスト管理キューに登録されたアドレスをDMAC42にセットしDMAC42を起動する、これによりDMAC42は、該セットされたアドレスに格納されているディスクリプタリストから1つ1つ順次ディスクリプタを読み込み、読み込んだディスクリプタに従って連続的にDMA転送を実行する。
1つのディスクリプタリストに連ねられたディスクリプタの全てについてDMA転送が完了すると、CPU24の割り込みが発生する。このとき、CPU24はディスクリプタリスト管理キューから次のディスクリプタリストのアドレスを読み出してDMAC42にセットする。そして、該セットされたアドレスのディスクリプタリストに連ねられたディスクリプタが順次読み込まれて連続的にDMA転送が行なわれる。この繰り返しにより、最終的に転送対象の画像データの全てがDMA転送される。
図2は、仮想記憶方式を採用したシステムにおいてDMAC42により読み込まれるディスクリプタリストの一例を示す図である。
マザーボード12のメモリ28は仮想記憶方式によりメモリ管理されている。図2(A)に示すように、物理的には不連続な物理アドレス領域が、連続する仮想アドレス領域にマッピングされて管理される。実際に記憶されているデータにアクセスする場合には、仮想アドレス領域の連続したアドレス範囲が、アドレス変換テーブル等に従って対応する物理アドレス範囲に変換されてアクセスされる。仮想アドレスにマッピングできる物理メモリの最小単位をページというが、CPU24は、このページ単位で物理的に分散しているデータのアドレスを調べ、各々についてディスクリプタを作成する。
図2(B)に示すように、本実施の形態のディスクリプタは、次ディスクリプタアドレス、転送データ量、転送元アドレス、及び転送先アドレスの情報を含んで構成されている。
「次ディスクリプタアドレス」は、ディスクリプタリストに連ねられた複数のディスクリプタの中で、そのディスクリプタの次にDMAC42により読み込まれるべきディスクリプタのアドレスを示すデータである。なお、そのディスクリプタがディスクリプタリストの一番最後に読み込まれるディスクリプタである場合には、次ディスクリプタアドレスの領域には、ディスクリプタリストの最後のディスクリプタであることを示すデータが格納される。この次ディスクリプタアドレスにより、物理的に不連続な領域に格納されたディスクリプタが連続的に読み出されてDMA転送される。
また、「転送データ量」は、そのディスクリプタによってDMA転送するデータのサイズを示すデータである。「転送元アドレス」は、転送対象のデータが格納されているメモリのアドレスを示すデータである。「転送先アドレス」は、転送元アドレスから転送データ量だけ読み出したデータを書き込むアドレスを示すデータである。
なお、本実施の形態において、個々のディスクリプタで転送可能なデータ量は、ページサイズを最大とし、各ディスクリプタの「転送データ量」はページサイズ以下の固定値(単位転送量)とする。これにより、ディスクリプタリストを構成するディスクリプタの数と転送時間とが比例関係になる。以下、各ディスクリプタリストを構成するディスクリプタの数を「ブロック数」と呼称する。
図3は、ディスクリプタリストを管理するディスクリプタリスト管理キューの構造を説明する説明図である。ディスクリプタリスト管理キューは、ディスクリプタリストが格納されたアドレス(より詳述すると、ディスクリプタリストを構成する複数のディスクリプタのうち先頭のディスクリプタが格納されたアドレス。)を示すディスクリプタリストポインタをリスト構造にして連ねて構成したバッファである。また、CPU24の所定のレジスタ(あるいはメモリの所定領域等)には、ディスクリプタリスト管理キューにおける先頭のディスクリプタリストポインタを指すディスクリプタリスト管理キューポインタが格納される。ディスクリプタリスト管理キューはFIFO方式であるため、CPU24が先頭のディスクリプタリストポインタを読み出したときには、ディスクリプタリスト管理キューポインタが次のディスクリプタリストポインタを指すように書き変えられる。
また、CPU24は、新たにディスクリプタリストを作成して所定の格納領域に格納すると、ディスクリプタリスト管理キューの最後尾に該作成したディスクリプタリストのアドレスを示すディスクリプタリストポインタを追加する。これにより、各ディスクリプタリストのアドレスが作成順に登録される。
なお、ディスクリプタリスト管理キューにディスクリプタリストが1つも登録されていない場合には、ディスクリプタリスト管理キューポインタはNULLとなる。
DMA転送を実行する場合には、CPU24は、ディスクリプタリスト管理キューポインタが指す先頭のディスクリプタリストポインタをDMAC42にセットしてDMAC42にDMA転送を開始させ、該ディスクリプタリストポインタが示すディスクリプタリストに基づいてDMA転送を行なわせる。DMA転送は、1つのディスクリプタリストのDMA転送が終了するまでCPU24の割り込み無しで連続的に行なわれる。一方、CPU24は、DMAC42によるDMA転送中、所定の作成条件を満たす範囲内で、次のディスクリプタリストやそれ以降のディスクリプタリストを先行して作成してディスクリプタリスト管理キューに登録する。
1つのディスクリプタリストによるDMA転送が終了すると、その時点でCPU24の割り込みが発生する。CPU24は、ディスクリプタリスト管理キューポインタが指す次のディスクリプタリストポインタをDMAC42にセットしてDMA転送させる。これにより、ディスクリプタリスト管理キューに登録された順にディスクリプタリストが読み出されてDMA転送が行なわれる。
本実施の形態では、データ量が予め定められたテスト用の基準データをDMA転送してDMA転送レートを測定し、該測定結果からディスクリプタリストの最適なブロック数を決定する。
図4は、ブロック数を決定するためのプログラムのフローを示すフローチャートである。このプログラムは、CPU24により所定のタイミングで実行される。
ステップ100では、j及びkに0をセットする。ここで、jは、基本データのデータ量を複数種類定義する配列size_tableの添字を示す。すなわち、配列size_tableの各要素には、異なるデータ量を示すデータが格納されている。また、kは、ブロック数を複数種類定義する配列block_tableの添字を示す。すなわち、配列block_tableの各要素には、異なるブロック数を示すデータが格納されている。
ステップ102では、配列size_tableの添字jをカウントアップし、該カウントアップした添字の要素に格納されている基準データのデータ量を変数data_sizeにセットする。
ステップ104では、配列block_tableの添字kをカウントアップし、該カウントアップした添字の要素に格納されているブロック数を変数block_countにセットする。なお、本実施の形態では、添字kが大きくなるほど配列block_tableに格納されているブロック数も大きくなる。
ステップ106では、変数block_countの値が各ディスクリプタリストのブロック数となるように設定する。
ステップ108では、DMA転送レートの測定を開始する。
ステップ110では、CPU24が変数block_countの数だけディスクリプタが連ねられたディスクリプタリストを作成し、DMAC42に変数data_sizeが示すデータ量の基準データをDMA転送させ、DMA転送レートの測定処理を行う。ここでは、DMA Write(書き込み)及びDMA read(読み出し)のいずれか一方を行なうようにしてもよいし、双方を行なうようにしてもよい。
ステップ112では、測定終了後に、DMA転送にかかった時間と変数data_sizeが示すデータ量とに基づいてDMA転送レートを求め、該求めたDMA転送レートを変数block_countの値(ブロック数)及び変数data_sizeの値(データ量)を対応付けて測定データとして保存する。
ステップ114では、所定ブロック数全ての測定を終了したか、すなわち、設定可能なブロック数は変数data_sizeに応じて当然上限があるため、変数data_sizeに応じて設定可能なブロック数の全てについて測定を終了したかを判定する。ここで、否定判定された場合には、ステップ104に戻ってkをカウントアップし、配列block_tableの次の要素に格納されているブロック数を変数block_countにセットして、上記と同様に再度測定を行なう。
一方、ステップ114で肯定判定された場合には、ステップ116に移行し、測定結果より、データ量が変数data_sizeの場合の最適なブロック数を決定し、変数data_sizeに対応付けて所定のテーブルに登録する。ここで、ブロック数の決定方法の具体例を説明する。
図5は、4Mバイトの基準データをDMA転送した場合のDMA転送レートの測定結果を示すグラフの一例であり、図6は、32Mバイトの基準データをDMA転送した場合のDMA転送レートの測定結果を示すグラフの一例であり、図7は、63Mバイトの基準データをDMA転送した場合のDMA転送レートの測定結果を示すグラフの一例である。
ここで、グラフ中のダブルディスクリプタ方式とは、CPUの割り込み時とDMA転送中の双方でディスクリプタリストを作成する方式であり、シングルディスクリプタ方式とは、CPUの割り込み時のみでディスクリプタリストを作成する方式をいう。また、グラフ中、「目安」として示しているのは、通常、ページ単位でディスクリプタが作成されDMA転送されるが、データの先頭部分や最後尾の部分がメモリ28上、物理的にページ単位の境界に無い場合には、CPU24の割り込み回数や1回のDMA転送サイズに若干の変動が生じる場合がある。従って、ここでは目安と記載している。しかしながら、この変動は大きなものではなく、無視できる程度であるため、ここでは測定結果をそのまま用いて最適なブロック数を決定する。
各グラフから明らかなように、どの方式の場合でもブロック数が少なすぎると転送レートが低く、ブロック数を多くするにつれて転送レートがだんだんと上がっていくが、ある程度転送レートが上がるとそこで安定し、ブロック数をいくら多くしてもあまり転送レートが上がらなくなる。従って、ステップ116では、CPU24は、転送レートが安定したときのブロック数を、そのデータ量における最適なブロック数として決定する。なお、安定したときのブロック数を、例えば、ブロック数の変化に対する転送レートの変化率が所定範囲内に収まったときのブロック数としてもよい。図5〜図7に示す例では、○で囲ったブロック数を最適なブロック数として決定している。
ところで、各グラフから明らかなように、転送レートが高いブロック数は、○で囲ったブロック数以外にもあるが、本実施の形態でこれらのブロック数を最適なブロック数としないのは、以下の理由による。
ブロック数が多すぎると、1つのディスクリプタリストを作成する時間が長くなる。これにより、最初のDMA転送開始時間が遅れるだけでなく、DMA転送期間中だけでは次のディスクリプタリストの作成が間に合わずに、待ち時間が発生して次のディスクリプタリストによるDMA転送の実行が遅れることもある。そこで、本実施の形態では、上記のように1つのディスクリプタリストを構成する最適なブロック数を求めるようにしている。
こうしてブロック数を決定した後、前述したように、そのブロック数を変数data_sizeに対応付けて所定のテーブルに登録する。図8は、基準データのデータ量(転送サイズ)に対応付けて最適なブロック数を登録したテーブルの一例である。このようなテーブルを、後述するDMA転送時にCPU24が参照できるよう、メモリ28やHDD32に格納しておく。以下、このように最適なブロック数を登録したテーブルをブロック数テーブルと呼称する。
ステップ118では、配列size_tableの全ての要素に格納されたデータ量についてDMA転送測定が終了したか否かを判定する。ここで否定判定した場合には、kをリセットしてステップ102に戻り、jをカウントアップして、配列size_tableの次の要素に格納されているデータ量を変数data_sizeにセットして、上記と同様に測定を行なう。
このように、基準データ毎にブロック数を変動させながらDMA転送して転送レートを測定し、該転送レートに基づいて転送データ量毎に最適なブロック数を決定する。
なお、最適なブロック数を測定して決定するタイミングであるが、転送レートは、DMA転送を行なうシステム(ここでは情報処理部13)の転送性能によって変化するため、システム開発段階でこうした測定を行なって、最適なブロック数を決定するようにしてもよい。
また、同じシステムであっても、例えば、システム上で動作するモジュールの種類や数等が異なればCPU24の負荷も変動して転送レートが変動することもあるため、システムの開発段階だけでなく、システム起動時や所定時間毎にこうした測定を行なって、最適なブロック数を決定しておき、ブロック数テーブルを更新するようにしてもよい。
また、LCD22を介してユーザが任意のタイミングで上記ブロック数の決定のためのプログラムを起動して、ブロック数テーブルを更新するようにしてもよい。
CPU24は、このように決定されテーブルに格納されたブロック数に従ってディスクリプタリストを作成してDMAC42にDMA転送を行なわせる。
図9は、DMA転送時に実行されるプログラムのフローを示すフローチャートである。このプログラムは、CPU24により実行される。
ステップ200では、変数remain_sizeに転送対象のデータの量を示すdata_sizeをセットする。変数remain_sizeは未転送のデータ量を示す変数であり、後述するように、1つのディスクリプタリストによるデータ転送が終了する毎に変数remain_sizeから転送済データ量(TransferSize)が減算される。また、ステップ200では、転送対象のデータを転送するためのディスクリプタリストが全て作成されたか否かを示すフラグDL_end_flagに0をセットする。
ステップ202では、転送対象のデータ全てが転送終了したか否かを判定する。ここでは、変数remain_sizeが0になり且つフラグDL_end_flagが1になった場合に全データの転送が終了したと判定し、それ以外の場合には、転送は終了していないと判定する。
ステップ202で否定判定された場合には、ステップ204で、最初のディスクリプタリストを作成するか否かを判定する。
ステップ204で肯定判定した場合には、ステップ206に移行する。
ステップ206では、ブロック数テーブルからdata_sizeに応じたブロック数を読み出し、該ブロック数を2で除算した数を最初のディスクリプタリストのブロック数として設定する。
なお、ここで、ブロック数テーブルから読み出したブロック数を2で除算して最初のディスクリプタリストのブロック数としたのは、最初のディスクリプタリストの作成時間を短縮し、DMAC42を起動するまでの時間を早くして、最初のDMA転送の開始タイミングを早めるためである。なお、逆に最初のディスクリプタリストのブロック数が少なすぎると、最初のディスクリプタリストによるDMA転送期間中に次のディスクリプタリストの作成が間に合わなくなる可能性があるため、ここでは2で除算して最初のディスクリプタリストのブロック数を求めている。なお、転送対象のデータの量(data_size)が極端に小さい場合には、ディスクリプタリストを構成する最適なブロック数も小さくなるため、読み出したブロック数をそのまま用いてもDMA転送の開始にあまり影響しないことが多い。従って、そのような場合には、読み出したブロック数を2で除算せずにそのまま用いるようにしてもよい。
また、ここでは2で除算して最初のディスクリプタリストのブロック数を求めたが、これに限定されず、データ量によっては3で除算してもよいし、所定数を減算する等、他の求め方で求めてもよい。
ステップ208では、ステップ206で設定したブロック数で最初のディスクリプタリストを作成してディスクリプタリスト管理キューに登録し、ディスクリプタ管理キューポインタが該作成したディスクリプタリストのアドレスを示す先頭のディスクリプタリストポインタを指すように設定する。そして、該ディスクリプタリスト管理キューポインタが指す先頭のディスクリプタリストポインタをDMAC42にセットした後、DMAC42を起動する。これにより、DMAC42がDMA転送を開始する。
一方、ステップ204で否定判定した場合には、ステップ210に移行し、ブロック数テーブルからdata_sizeに応じた最適なブロック数を読み出し、該ブロック数をこれから作成するディスクリプタリストのブロック数として設定する。
ステップ208またはステップ210の処理後は、ステップ212で、現在のCPU24の使用率またはCPU24の占有時間を取得する。本システムでは、このプログラムの実行中は、常にバックグラウンドでCPU24の使用率またはCPU24の占有時間をモニタしている。なお、CPU24の占有時間は、個々のディスクリプタリストによるDMA転送開始から累積的に計時され、DMA転送終了時(CPU24割り込み時)にリセットされる。
ステップ214では、ディスクリプタリスト作成条件を満たしているか否かを判定する。ディスクリプタリスト作成条件は、予め本プログラム実行中に参照可能なHDD32などの記憶装置に記憶され設定されている。本実施の形態では、
1,CPU24の使用率または占有時間が所定値を超えておらず、且つ直前のCPU24の割り込みから現時点までに作成したディスクリプタリストの数が、次の割り込みまで(実行中のDMA転送が終了するまで)に作成可能なディスクリプタリストの数を超えていないこと、
2,ディスクリプタリスト管理キューにディスクリプタリストが1つも登録されていないこと(すなわち、ディスクリプタリスト管理キューポインタがNULLであること)、
の2つの条件がディスクリプタリスト作成条件として設定されている。
1,CPU24の使用率または占有時間が所定値を超えておらず、且つ直前のCPU24の割り込みから現時点までに作成したディスクリプタリストの数が、次の割り込みまで(実行中のDMA転送が終了するまで)に作成可能なディスクリプタリストの数を超えていないこと、
2,ディスクリプタリスト管理キューにディスクリプタリストが1つも登録されていないこと(すなわち、ディスクリプタリスト管理キューポインタがNULLであること)、
の2つの条件がディスクリプタリスト作成条件として設定されている。
本実施の形態では、この2つの作成条件うち、少なくとも一方が満たされれば、CPU24はステップ214で肯定判定する。
なお、実行中のDMA転送に係るディスクリプタリストのブロック数によって、CPU24の割り込みが発生するまでの時間が変動するため、その時間内で作成可能なディスクリプタリストの数も変動する。そこで、本実施の形態では、ディスクリプタリストのブロック数に応じて、DMA転送中に作成可能なディスクリプタリストの数を予めHDD32などの記憶装置に記憶して設定しておき、CPU24はこれを参照することにより(或いは、予め記憶しておくことはせずその都度演算することにより、)、次の割り込みまでに作成可能なディスクリプタリストの数を取得し、該作成可能なディスクリプタの数を上限としてディスクリプタリストを作成するようにしている(上記作成条件の1を参照)。
ステップ214で肯定判定した場合には、ステップ216で、CPU24は、上記ステップ210で読み出したブロック数のディスクリプタリストを1つ作成し、ディスクリプタリスト管理キューに登録する。
ステップ218では、転送対象のデータを転送するためのディスクリプタリストを全て作成したか否かを判定する。ここで否定判定した場合には、ステップ202に戻って、上記処理を繰り返す。一方、ステップ218で肯定判定した場合には、ステップ220でフラグDL_end_flagに1をセットしてステップ202に戻る。
また、ステップ214で、ディスクリプタリスト作成条件を満たしていないと判定した場合には、CPU24はディスクリプタリストの作成をこれ以上行なわずにステップ222に移行し、現在実行中のDMA転送が終了するのを待つ。DMAC42においてDMA転送が終了して割り込みハンドラからシグナルが来ると、ステップ224に移行し、変数remain_sizeから今回のDMA転送により転送されたデータ量(TransferSize)を減算する。
ステップ226では、CPU24は、ディスクリプタリスト管理キューポインタに基づいてディスクリプタリスト管理キューから次のディスクリプタリストポインタを取り出す。
ステップ228では、上記取り出したディスクリプタリストポインタをDMAC42にセットした後、DMAC42を起動する。これにより、DMAC42が次のディスクリプタリストによるDMA転送を開始する。ステップ228の後は、ステップ202に戻り、上記と同様に処理を行なう。
ステップ224で変数remain_sizeから転送済データ量が徐徐に減算されて0になり、且つステップ220でフラグDL_end_flagが1になると、ステップ202で転送対象のデータが全て転送終了したと判定し、本プログラムを終了する。
次に、ディスクリプタリストの作成方法をタイミングチャートを参照しながら更に具体的に説明する。
図10は、ディスクリプタリストのブロック数を最初のディスクリプタリストとそれ以外のディスクリプタリストとで異ならせる場合のタイミングチャートの一例を示す図である。
図10において、「全画像データ転送区間」で示される期間は、転送対象のデータの全てをDMA転送するための期間であって、具体的には、DMA転送機能(上記説明したDMA転送のプログラム)をコールしてから該プログラムが終了するまでの期間を示す。
また、図10において、DMA転送区間T1〜Tnで示される複数の期間の各々は、1つのディスクリプタリストに基づくDMA転送の開始から終了までの期間(すなわち、CPU24の割り込みが終了してから次の割り込みが発生するまでの期間)をいう。
また、ディスクリプタリスト構築区間D1〜Dnで示される複数の期間の各々は、1つのディスクリプタリストを作成する期間を示す(1つの構築区間で1つのディスクリプタリストが作成される)。なお、この例では、DMA転送区間T1に対応するディスクリプタリストは、該DMA転送区間T1の開始前の構築区間D1で作成され、DMA転送区間T2に対応するディスクリプタリストは、その1つ前のDMA転送区間T1内の構築区間D2で作成され、DMA転送区間T3に対応するディスクリプタリストは、その1つ前のDMA転送区間T2内の構築区間D3で作成され、、、、というように、1番目のディスクリプタリストを除く各ディスクリプタリストは、1つ前のDMA転送区間で作成される。
また、前述したように、本実施の形態では、1番目のディスクリプタリストのブロック数は、2番目以降のディスクリプタリストのブロック数よりも少なく設定される。従って、図10に示すように構築区間D1は、構築区間D2〜Dnに比べて短くなる。従って、1番目のディスクリプタリストに基づいて行なわれるDMA転送の開始タイミングが早まる。なお、2番目以降のディスクリプタリストは、前述したように、ブロック数決定プログラムで決定された最適なブロック数(ここでは、ブロック数テーブルに登録されているブロック数)で作成される。
次に、上述の実施の形態のDMA転送プログラムと同様に、DMA転送実行中に(DMA転送区間内で)ディスクリプタリスト作成条件を満たした場合に、該実行中のDMA転送以降に行なわれるDMA転送のためのディスクリプタリストを作成可能な範囲内で作成する場合についての具体例を、図9,図10を参照して説明する。
図11は、CPU24の使用率をモニタしながらディスクリプタリストを作成する場合のタイミングチャートの一例を示す図である。
図11では、図10に示す「全画像データ転送区間」、「DMA転送区間」、及び「ディスクリプタリスト構築区間」に加えて、「システムのCPU使用率」が示されている。CPU使用率は、モジュール等がCPU24を占有する時間の割合を%で示したものである。
この例では、ディスクリプタリスト管理キューにディスクリプタリストが1つも登録されていなければ、CPU使用率に拘わらずディスクリプタリストを作成するが、そうでなければ、CPU使用率を参照し、CPU使用率が予め定められた上限値を超えていなければ、そのDMA転送区間で作成可能な数以内で先行してディスクリプタリストを作成する。一方、CPU使用率の上限値を超えた、或いはそのDMA転送区間で作成したディスクリプタリストの数がそのDMA転送区間で作成可能な数に到達した場合には、ディスクリプタリストの作成は行なわずに、次のDMA転送区間に作成処理を繰り越す。
図11に示すように、DMA転送区間T1の前の構築区間D1でブロック数の少ないディスクリプタリストを1つ作成した後、DMA転送区間T1において、最適なブロック数のディスクリプタリストを2つ作成している(構築区間D2、D3で合計2つ)。また、次のDMA転送区間T2では、3つの構築区間D4、D5、D6で3つのディスクリプタリストを作成している。DMA転送区間T1,T2では、CPU使用率が上限値よりも低いため、DMA転送区間の長さに応じて作成可能な数だけディスクリプタリストが作成されている。
ところが、DMA転送区間T3ではCPU使用率は上限値を超えている。また、既にDMA転送区間T1,T2で、DMA転送区間T6に対応するディスクリプタリストまで先行して作成済みである。従って、DMA転送区間T3ではディスクリプタリスト作成条件を満たさないため、ディスクリプタリストが1つも作成されない。また、DMA転送区間T4では、途中からCPU使用率が上限値以下となるため、その時点でディスクリプタリストが作成されている(構築区間D7)。
このようにCPU使用率をモニタしながらディスクリプタリストを作成する方法は、例えば、実行モジュールの切替えが強制的に行なわれるプリエンプティブなモジュールでディスクリプタリストを作成するシステム等、様々なシステムに好適である。
図12は、CPU24の占有時間をモニタしながらディスクリプタリストを作成する場合のタイミングチャートの一例を示す図である。
図12では、図8に示す「全画像データ転送区間」、「DMA転送区間」、及び「ディスクリプタリスト構築区間」に加えて、「CPU占有時間」が示されている。CPU占有時間は、ディスクリプタリストを作成するモジュールがCPU24を占有する時間の累計を示したものであり、予め画像処理システム10に組み込まれたCPU24の占有時間を計時するモジュールによって得られる。なお、このCPU占有時間は、CPU24の割り込みが発生する度に、0にリセットされる。
この例では、ディスクリプタリスト管理キューにディスクリプタリストが1つも登録されていなければ、CPU占有時間に拘わらずディスクリプタリストを作成するが、そうでなければ、CPU占有時間を参照し、CPU占有時間が予め定められた上限値を超えていなければ、そのDMA転送区間で作成可能な数以内で先行してディスクリプタリストを作成する。一方、CPU占有時間の上限値を超えた、或いはそのDMA転送区間で作成したディスクリプタリストの数がそのDMA転送区間で作成可能な数に到達した場合には、ディスクリプタリストの作成は行なわずに、次のDMA転送区間に作成処理を繰り越す。
図12に示すように、DMA転送区間T1の前の構築区間D1でブロック数の少ないディスクリプタリストを1つ作成した後、DMA転送区間T1において、最適なブロック数のディスクリプタリストを2つ作成している(構築区間D2、D3)。構築区間D3でディスクリプタリスト作成が終了した時点でCPU占有時間が上限値に到達しているため、このDMA転送区間T1ではこれ以上のディスクリプタリストの作成は行なわれていない。
次のDMA転送区間T2でも、ディスクリプタリストを2つ作成した時点でCPU占有時間が上限値に到達しているため、それ以上のディスクリプタリストの作成は行なわれていない。続くDMA転送区間T3、T4でも同様である。
このようにCPU占有時間をモニタしながらディスクリプタリストを作成する方法は、例えば、実行モジュールの切替えが強制的に行なわれないノンプリエンプティブな組込型モジュールでディスクリプタリストを作成するシステム等、様々なシステムに好適である。
以上、様々な例について説明したが、本発明は、上述した実施の形態に限定されるものではなく、特許請求の範囲に記載された発明の範囲内で様々な設計上の変更を行うようにしてもよい。
例えば、上記実施の形態では、DMA転送の開始時に最初のディスクリプタリストのブロック数を演算で求めたが、これに限定されず、予め最初のディスクリプタリストのブロック数を求めておき、図13に示すように、ブロック数テーブルに予め登録しておくようにしてもよい。
また、本実施の形態では最初のディスクリプタリストのブロック数のみを少なくする例について説明したが、これに限定されず、例えば、最初のディスクリプタリストを最も少ないブロック数にして、2番目、3番目と段階的にブロック数を増やすようにしてもよい。このように段階的にブロック数を増やす場合であっても、なるべく早い段階で最適なブロック数のディスクリプタリストが作成されるようにして、転送効率が下がらないようにするとよい。
10 画像処理システム
12 マザーボード
13 情報処理部
14 コントローラボード
24 CPU
26 ハブ
28 メモリ
30 ハブ
32 HDD
40 バスブリッジ
42 DMAコントローラ
44 メモリ
12 マザーボード
13 情報処理部
14 コントローラボード
24 CPU
26 ハブ
28 メモリ
30 ハブ
32 HDD
40 バスブリッジ
42 DMAコントローラ
44 メモリ
Claims (7)
- 中央演算処理装置(CPU)を介在させないダイレクトメモリアクセス(DMA)転送に必要な情報を含む単位転送量毎の転送情報を複数連ねて構成した転送情報群に基づいて転送対象のデータを前記単位転送量毎にDMA転送する転送手段と、
データ量が予め定められた基準データを前記転送情報群を構成する転送情報の個数を変化させながら前記転送手段によってDMA転送したときの転送速度に基づいて前記転送情報群を構成する転送情報の数を決定する決定手段と、
転送対象のデータをDMA転送するときに、前記決定手段で決定された数の転送情報を連ねて構成した転送情報群を作成する作成手段と、
を含む情報処理装置。 - 前記決定手段で決定された転送情報の数を基準データのデータ量に対応付けて記憶した記憶手段を更に備え、
前記作成手段は、転送対象のデータをDMA転送するときに、該転送対象のデータ量に応じて前記記憶手段に記憶された数を読み出し、該読み出した数の転送情報を連ねて構成した転送情報群を作成する請求項1に記載の情報処理装置。 - 前記作成手段は、前記転送対象のデータをDMA転送するために複数の転送情報群を作成する場合に、先頭の転送情報群または先頭から所定数までの転送情報群については、前記決定手段で決定された数よりも少ない数の転送情報で構成された転送情報群を作成し、それ以降の転送情報群については、前記決定手段で決定された数の転送情報を構成した転送情報群を作成する請求項1または2に記載の情報処理装置。
- 前記作成手段は、前記転送対象のデータをDMA転送するために複数の転送情報群を作成する場合に、前記転送手段で実行中のDMA転送が終了するまでに該実行中のDMA転送以降に行なわれるDMA転送のための転送情報群を作成して作成順に転送情報用記憶手段に記憶し、
前記転送手段は、前記転送情報用記憶手段から前記作成順に転送情報群を読み出してDMA転送を行なう請求項1〜3の何れか1項に記載の情報処理装置。 - 前記作成手段は、前記転送情報群の作成をCPU使用率またはCPU占有時間が所定値を超えていない場合に行なう請求項4に記載の情報処理装置。
- 前記作成手段は、前記転送情報用記憶手段に未読の転送情報群が1つも記憶されていない場合には、前記CPU使用率またはCPU占有時間が所定値を超えている場合であっても実行中のDMA転送以降に行なわれるDMA転送のための転送情報群を作成する請求項5に記載の情報処理装置。
- 中央演算処理装置(CPU)を介在させないダイレクトメモリアクセス(DMA)転送に必要な情報を含む単位転送量毎の転送情報を複数連ねて構成した転送情報群に基づいて転送対象のデータを前記単位転送量毎にDMA転送する転送手段が設けられたコンピュータを、
データ量が予め定められた基準データを前記転送情報群を構成する転送情報の個数を変化させながら前記転送手段によってDMA転送したときの転送速度に基づいて前記転送情報群を構成する転送情報の数を決定する決定手段、および
転送対象のデータをDMA転送するときに、前記決定手段で決定された数の転送情報を連ねて構成した転送情報群を作成する作成手段、
として機能させるためのプログラム。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2007227678A JP2009059276A (ja) | 2007-09-03 | 2007-09-03 | 情報処理装置およびプログラム |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2007227678A JP2009059276A (ja) | 2007-09-03 | 2007-09-03 | 情報処理装置およびプログラム |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2009059276A true JP2009059276A (ja) | 2009-03-19 |
Family
ID=40554926
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2007227678A Pending JP2009059276A (ja) | 2007-09-03 | 2007-09-03 | 情報処理装置およびプログラム |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP2009059276A (ja) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2011189509A (ja) * | 2010-03-11 | 2011-09-29 | Ricoh Co Ltd | 画像形成装置及びその画像データ送信処理方法 |
JP2013246778A (ja) * | 2012-05-29 | 2013-12-09 | Nec Corp | Dma転送装置、dma転送方法及びdma転送プログラム |
JP5638124B2 (ja) * | 2011-03-29 | 2014-12-10 | 三菱電機株式会社 | ナビゲーション装置 |
-
2007
- 2007-09-03 JP JP2007227678A patent/JP2009059276A/ja active Pending
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2011189509A (ja) * | 2010-03-11 | 2011-09-29 | Ricoh Co Ltd | 画像形成装置及びその画像データ送信処理方法 |
JP5638124B2 (ja) * | 2011-03-29 | 2014-12-10 | 三菱電機株式会社 | ナビゲーション装置 |
JP2013246778A (ja) * | 2012-05-29 | 2013-12-09 | Nec Corp | Dma転送装置、dma転送方法及びdma転送プログラム |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP7313381B2 (ja) | ハードウェアアクセラレーションのためのハードウェアリソースの埋込みスケジューリング | |
US8683093B2 (en) | Memory system having high data transfer efficiency and host controller | |
CN102414671B (zh) | 对于不同源的分级内存仲裁技术 | |
JP5270077B2 (ja) | 調停回路、クロスバ、リクエスト選択方法、及び情報処理装置 | |
CN103034454B (zh) | 柔性闪存命令 | |
US20070076246A1 (en) | Image processing apparatus | |
JP2010027032A (ja) | Fifo装置及びfifoバッファへのデータ格納方法 | |
CN102646446A (zh) | 硬件动态高速缓存电源管理 | |
US11010094B2 (en) | Task management method and host for electronic storage device | |
JP2009277096A (ja) | Dma制御システム、印刷装置、および転送指示プログラム | |
KR20080105390A (ko) | 플래시 메모리에 사용되는 명령어들을 제어하는 방법 및장치 | |
JP2009059276A (ja) | 情報処理装置およびプログラム | |
US20030172229A1 (en) | Systems and methods for detecting and compensating for runt block data transfers | |
US20060179172A1 (en) | Method and system for reducing power consumption of a direct memory access controller | |
KR102334473B1 (ko) | 적응형 딥러닝 가속 장치 및 방법 | |
CN112214095A (zh) | 一种控制硬盘功耗的方法和设备 | |
KR101135313B1 (ko) | 요청 동작을 스케줄링하는 낸드 플래시 메모리 장치 및 방법 | |
CN112767978B (zh) | 一种ddr命令调度方法、装置、设备及介质 | |
US8769167B2 (en) | Channel device, information processing system and data transfer method | |
CN101276315B (zh) | 动态调整传输数据宽度的直接存储器存取控制器与方法 | |
JP2006215621A (ja) | Dma制御装置 | |
JP2011081695A (ja) | データ演算装置の制御回路及びデータ演算装置 | |
US20090276553A1 (en) | Controller, hard disk drive and control method | |
WO2024114728A1 (zh) | 一种异构处理器及相关调度方法 | |
JPH11110342A (ja) | バス接続方法及び装置 |