(57)【特許請求の範囲】
【請求項１】
第１バンク及び第２バンクを備えるキャッシュメモリであって、
中央処理装置から受信したメインメモリアドレスを第１ハッシュ関数を使用して第１インデックス値に変換する第１ハッシュ関数モジュールと、
前記メインメモリアドレスを第２ハッシュ関数を使用して第２インデックス値に変換する第２ハッシュ関数モジュールと、
前記第１バンクで前記第１インデックス値に位置するデータブロックのタグ値と前記メインメモリアドレスのタグ値とを比較する第１比較器と、
前記第２バンクで前記第２インデックス値に位置するデータブロックのタグ値と前記メインメモリアドレスのタグ値とを比較する第２比較器と
を含み、
前記第１ハッシュ関数及び前記第２ハッシュ関数は、２ｍｘｍ二進行列であり、前記ｍは、５以上の奇数であること
を特徴とするキャッシュメモリ。
【請求項２】
前記第１ハッシュ関数及び前記第２ハッシュ関数は、最大バンク間分散次数を有し、行、列、対角線、反対角線及び矩形パターンで衝突対が生じないことを特徴とする請求項１に記載のキャッシュメモリ。
【請求項３】
前記第１ハッシュ関数は、ｍｘｍ行列Ａ＝（ａｉ、ｊ）ｍｘｍ及びｍｘｍ恒等行列の並置で構成され、前記ａｉ、ｊは、次の数学式によって定められることを特徴とする請求項１に記載のキャッシュメモリ。
ａｉ、ｊ    ＝１、          １≦ｉ≦ｍ、ｊ＝ｍ＋１−ｉの場合
＝１、          １≦ｉ≦ｋ、ｊ＝ｉ＋１の場合
＝１、          ｉ＝ｋ＋１、ｊ＝１の場合
＝１、          ｉ＝ｋ＋２、ｊ＝１の場合
＝０または１、  １≦ｉ≦ｋ−２、ｉ＋２≦ｊ≦ｋの場合
＝０、          それ以外の場合
（ここで、ｍ＝２ｋ＋１）
【請求項４】
前記第２ハッシュ関数は、ｍｘｍ行列Ｂ＝（ｂｉ、ｊ）ｍｘｍとｍｘｍ恒等行列の並置で構成され、前記ｂｉ、ｊは、次の数学式によって定められることを特徴とする請求項１に記載のキャッシュメモリ。
ｂｉ、ｊ    ＝１、          １≦ｉ≦ｍ、ｊ＝ｍ＋１−ｉの場合
＝１、          ｋ＋２≦ｉ≦ｍ、ｊ＝ｉ−１の場合
＝１、          ｉ＝ｋ＋１、ｊ＝ｍの場合
＝０または１、  ｋ＋４≦ｉ≦ｍ、ｋ＋２≦ｊ≦ｉ−２の場合
＝０、          その以外の場合
（ここで、ｍ＝２ｋ＋１）
【請求項５】
第１バンク及び第２バンクを備えるキャッシュメモリを制御する方法であって、
（ａ）中央処理装置からメインメモリアドレスを受信する段階と、
（ｂ）前記メインメモリアドレスを第１ハッシュ関数を使用して第１インデックス値に変換する段階と、
（ｃ）前記メインメモリアドレスを第２ハッシュ関数を使用して第２インデックス値に変換する段階と、
（ｄ）前記第１バンクで前記第１インデックス値に位置するデータブロックのタグ値と前記メインメモリアドレスのタグ値とを比較する段階と、
（ｅ）前記第２バンクで前記第２インデックス値に位置するデータブロックのタグ値と前記メインメモリアドレスのタグ値とを比較する段階と、
（ｆ）前記段階（ｄ）及び（ｅ）の比較結果によって前記第１バンクで前記第１インデックス値に位置するデータブロックのデータ値または前記第２バンクで前記第２インデックス値に位置するデータブロックのデータ値の伝送可否を決定する段階とを含み、
前記第１ハッシュ関数及び前記第２ハッシュ関数は、２ｍｘｍ二進行列であり、前記ｍは、５以上の奇数であるキャッシュメモリの制御方法。
【請求項６】
前記第１ハッシュ関数及び前記第２ハッシュ関数は、最大バンク間分散次数を有し、行、列、対角線、反対角線及び矩形パターンで衝突対が生じないことを特徴とする請求項５に記載のキャッシュメモリの制御方法。
【請求項７】
前記第１ハッシュ関数は、ｍｘｍ行列Ａ＝（ａｉ、ｊ）ｍｘｍ及びｍｘｍ恒等行列の並置で構成され、前記ａｉ、ｊは、次の数学式によって定められることを特徴とする請求項５に記載のキャッシュメモリの制御方法。
ａｉ、ｊ  ＝１、          １≦ｉ≦ｍ、ｊ＝ｍ＋１−ｉの場合
＝１、          １≦ｉ≦ｋ、ｊ＝ｉ＋１の場合
＝１、          ｉ＝ｋ＋１、ｊ＝１の場合
＝１、          ｉ＝ｋ＋２、ｊ＝１の場合
＝０または１、  １≦ｉ≦ｋ−２、ｉ＋２≦ｊ≦ｋの場合
＝０、          その以外の場合
（ここで、ｍ＝２ｋ＋１）
【請求項８】
前記第２ハッシュ関数は、ｍｘｍ行列Ｂ＝（ｂｉ、ｊ）ｍｘｍとｍｘｍ恒等行列の並置で構成され、前記ｂｉ、ｊは、次の数学式によって定められることを特徴とする請求項５に記載のキャッシュメモリの制御方法。
ｂｉ、ｊ  ＝１、          １≦ｉ≦ｍ、ｊ＝ｍ＋１−ｉの場合
＝１、          ｋ＋２≦ｉ≦ｍ、ｊ＝ｉ−１の場合
＝１、          ｉ＝ｋ＋１、ｊ＝ｍの場合
＝０または１、  ｋ＋４≦ｉ≦ｍ、ｋ＋２≦ｊ≦ｉ−２の場合
＝０、          それ以外の場合
（ここで、ｍ＝２ｋ＋１）
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、キャッシュメモリ及びその制御方法に関し、特に、線形ハッシュ関数を使用するキャッシュメモリ及びその制御方法に関する。
【背景技術】
【０００２】
ハッシュ関数（Hash function）は、任意の大きさのメッセージを固定された大きさのメッセージに変換する関数である。特に、ハッシュ関数が二進行列で表現される二進線形関数である場合、このようなハッシュ関数を線形ハッシュ関数（Linear hash function）またはＸＯＲ基盤ハッシュ関数（ＸＯＲ based hash function）と言う。例えば、任意のベクトルＸは、線形ハッシュ関数Ｈによって次のように変換されることができる。
【０００３】
【数１】
0004374059.tif 000002
【０００４】
このような線形ハッシュ関数は、スキュードアソシエイティブキャッシュ（Skewed associative cache）の各バンクに対するハッシュ関数として使用され、キャッシュメモリのヒットレート（Hit rate）を高めるのに使われることができる。
【０００５】
ここで、スキュードアソシエイティブキャッシュは、キャッシュメモリを多重バンクで構成してヒットレートを高めるように考案された方式の１つであって、セットアソシエイティブキャッシュ（set associative cache）とは異なって、バンク間ハッシュ関数を異に運用することによって、同じメモリアドレスを有するデータであっても、バンク間に互いに異なるインデックスにマッピングされるようにする方式である。特に、２つのキャッシュバンクを使用する２−ウェイスキュードアソシエイティブキャッシュ（2-way skewed associative cache）は、４−ウェイセットアソシエイティブキャッシュ（4-way set associative cache）や２−ウェイセットアソシエイティブキャッシュ（2-way set associative cache）よりヒットレートに優れている方式として知られている。
【０００６】
このような２−ウェイスキュードアソシエイティブキャッシュにおいて優れたヒットレートを保証することができるハッシュ関数として、最大のバンク間分散次数（Degree of Interbank dispersion）を有し、行、列、対角線、反対角線及び矩形パターンに対して衝突回避を保証する線形ハッシュ関数対を構成する方法が提案された（H. Vandierendonck and K. DeBosschere, Xor-based hash functions, IEEE Trans. Computers, 54(7), pp. 800-812, 2005）。ここで、線形ハッシュ関数対のバンク間分散次数は、２つのハッシュ関数値が同時に０になる値がどれほど少ないかを意味する。したがって、バンク間分散次数が最大である場合は、２つのハッシュ関数値が同時に０になる場合の数が最小である場合である。また、前述したように、線形ハッシュ関数対のバンク間分散次数とともに、各線形ハッシュ関数の行、列、対角線、反対角線及び矩形パターンでの衝突回避特性が考慮される。例えば、ヒットレートを高めるためには、隣接するメモリアドレスのデータをキャッシュメモリに全て格納することが可能でなければならないし、これは、行パターンでの衝突回避と関連がある。
【０００７】
２ｍｘｍの二進行列で構成される線形ハッシュ関数対において、ｍが偶数である場合、最大のバンク間分散次数を有し、行、列、対角線、反対角線及び矩形パターンに対して衝突回避を保証する線形ハッシュ関数対は提示されたことがあるが、ｍが奇数である場合については、上記のような特性を有する線形ハッシュ関数対が提示されたことがないので、キャッシュメモリ構成に制約が伴うという短所がある。
【０００８】
【非特許文献１】ＸＯＲ−Based  Hash  Functions：Hans  Vandierendonck，Member，IEEE，and  Koen  De  Bosschere，Member,  IEEE  Computer  Society
【発明の開示】
【発明が解決しようとする課題】
【０００９】
本発明が解決しようとする課題は、２ｍｘｍの二進行列で構成される線形ハッシュ関数対でｍが奇数である場合にも、最大のバンク間分散次数を有し、行、列、対角線、反対角線及び矩形パターンで衝突対が発生しない線形ハッシュ関数対を使用するキャッシュメモリ及びその制御方法を提供することにある。
【課題を解決するための手段】
【００１０】
上記目的を達成するために、本発明の一態様に係るキャッシュメモリは、中央処理装置から受信したメインメモリアドレスを第１ハッシュ関数を使用して第１インデックス値に変換する第１ハッシュ関数モジュールと、前記メインメモリアドレスを第２ハッシュ関数を使用して第２インデックス値に変換する第２ハッシュ関数モジュールと、前記第１バンクで前記第１インデックス値に位置するデータブロックのタグ値と前記メインメモリアドレスのタグ値とを比較する第１比較器と、前記第２バンクで前記第２インデックス値に位置するデータブロックのタグ値と前記メインメモリアドレスのタグ値とを比較する第２比較器とを含み、前記第１ハッシュ関数及び前記第２ハッシュ関数は、２ｍｘｍ二進行列であり、前記ｍは、５以上の奇数である。
【００１１】
本発明の他の態様に係るキャッシュメモリの制御方法は、（ａ）中央処理装置からメインメモリアドレスを受信する段階と、（ｂ）前記メインメモリアドレスを第１ハッシュ関数を使用して第１インデックス値に変換する段階と、（ｃ）前記メインメモリアドレスを第２ハッシュ関数を使用して第２インデックス値に変換する段階と、（ｄ）前記第１バンクで前記第１インデックス値に位置するデータブロックのタグ値と前記メインメモリアドレスのタグ値とを比較する段階と、（ｅ）前記第２バンクで前記第２インデックス値に位置するデータブロックのタグ値と前記メインメモリアドレスのタグ値とを比較する段階と、（ｆ）前記段階（ｄ）及び（ｅ）の比較結果によって前記第１バンクで前記第１インデックス値に位置するデータブロックのデータ値または前記第２バンクで前記第２インデックス値に位置するデータブロックのデータ値の伝送可否を決定する段階と、を含み、前記第１ハッシュ関数及び前記第２ハッシュ関数は、２ｍｘｍ二進行列であり、前記ｍは、５以上の奇数である。
【発明の効果】
【００１２】
本発明は、２ｍｘｍの二進行列で構成される線形ハッシュ関数対においてｍが奇数である場合にも最大のバンク間分散次数を有し、行、列、対角線、反対角線及び矩形パターンで衝突対が発生しない線形ハッシュ関数対を提供することによって、２−ウェイスキュードアソシエイティブキャッシュをさらに幅広く構成することができる。
【発明を実施するための最良の形態】
【００１３】
以下、本発明の好ましい実施例を添付の図面を参照して詳しく説明する。
【００１４】
図１は本発明の一実施例に係るキャッシュメモリの構成を示すブロック図である。
【００１５】
図１を参照すれば、中央処理装置（ＣＰＵ）１１０は、メインメモリアドレスＺにあるデータに対する接近をキャッシュメモリ１２０に要求する。ここで、メインメモリアドレスＺは、２ｍビートとして仮定し、これにより、メインメモリアドレスＺは、０≦Ｚ＜２２ｍの値を有する。
【００１６】
第１ハッシュ関数モジュール１３０及び第２ハッシュ関数モジュール１４０は、メインメモリアドレスＺを受信し、各々第１ハッシュ関数Ｈ１及び第２ハッシュ関数Ｈ２に基盤して第１インデックス値Ｈ１（Ｚ）及び第２インデックス値Ｈ２（Ｚ）を生成する。ここで、第１ハッシュ関数Ｈ１及び第２ハッシュ関数Ｈ２は、所定の規則によって生成される２ｍｘｍの二進行列の対であり、前記ｍは、５以上の奇数である。第１ハッシュ関数Ｈ１及び第２ハッシュ関数Ｈ２の生成規則については、図２を参照して後述する。
【００１７】
第１比較器１５０は、第１バンク１７０で第１インデックス値Ｈ１（Ｚ）に位置するデータブロックのタグ値とメインメモリアドレスＺのタグ値とを比較する。第１インデックス値Ｈ１（Ｚ）に位置するデータブロックのタグ値とメインメモリアドレスＺのタグ値とが一致する場合、キャッシュメモリ１２０は、第１バンク１７０で第１インデックス値Ｈ１（Ｚ）に位置するデータブロックのデータ値をＣＰＵ１１０に伝送する。
【００１８】
同じ原理で、第２比較器１６０は、第２バンク１８０で第２インデックス値Ｈ２（Ｚ）に位置するデータブロックのタグ値とメインメモリアドレスＺのタグ値とを比較する。第２インデックス値Ｈ２（Ｚ）に位置するデータブロックのタグ値とメインメモリアドレスＺのタグ値とが一致する場合、キャッシュメモリ１２０は、第２バンク１８０で第２インデックス値Ｈ２（Ｚ）に位置するデータブロックのデータ値をＣＰＵ１１０に伝送する。
【００１９】
メインメモリアドレスＺのタグ値がいずれとも一致しない場合、キャッシュミス（Cache miss）が発生したものであり、メインメモリ上のメインメモリアドレスＺに位置するデータがキャッシュメモリに伝送され、伝送されたデータは、ＣＰＵに伝送されると同時に、キャッシュメモリの交替政策（Replacement policy）によってキャッシュメモリのバンクに格納される。
【００２０】
図２は、本発明の一実施例に係る第１ハッシュ関数及び第２ハッシュ関数を示す図である。
【００２１】
図２を参照すれば、各々の第１ハッシュ関数Ｈ１及び第２ハッシュ関数Ｈ２は、１０ビットのメインメモリアドレスを５ビットのインデックス値に変換するための関数の例であって、１０ｘ５の二進行列で表現されることができる。上記例によれば、メインメモリアドレスＺが［Ｚ９、Ｚ８、Ｚ７、Ｚ６、Ｚ５、Ｚ４、Ｚ３、Ｚ２、Ｚ１、Ｚ０］である場合、Ｈ１（Ｚ）は、
【００２２】
【数２】
0004374059.tif 000003
【００２３】
になり、Ｈ２（Ｚ）は、
【００２４】
【数３】
0004374059.tif 000004
【００２５】
になる。このような第１ハッシュ関数Ｈ１及び第２ハッシュ関数Ｈ２は、次の生成規則によって生成されることができる。
【００２６】
第１ハッシュ関数Ｈ１及び第２ハッシュ関数Ｈ２は、２ｍｘｍの二進行列であって、ｍ＝２ｋ＋１であり、ｍは、５以上の奇数である。線形ハッシュ関数Ｈ１、Ｈ２：｛０、１｝２ｍ→｛０、１｝ｍは、各々次のように生成されることができる。
【００２７】
まず、Ｈ１＝（ｈ１ｉ、ｊ）２ｍｘｍは、ｍｘｍ行列Ａ＝（ａｉ、ｊ）ｍｘｍとｍｘｍ恒等行列の並置（juxtaposition）で構成される。これを式で表現すれば、次の通りである。
【００２８】
ｈ１ｉ、ｊ  ＝ａｉ、ｊ    ｉ≦ｍの場合
＝１、      ｉ＞ｍ、ｊ＝ｉ−ｍの場合
＝０、      それ以外の場合
この時、ａｉ、ｊは、次のように定められる。
【００２９】
ａｉ、ｊ  ＝１、        １≦ｉ≦ｍ、ｊ＝ｍ＋１−ｉの場合
＝１、        １≦ｉ≦ｋ、ｊ＝ｉ＋１の場合
＝１、        ｉ＝ｋ＋１、ｊ＝１の場合
＝１、        ｉ＝ｋ＋２、ｊ＝１の場合
＝０または１、１≦ｉ≦ｋ−２、ｉ＋２≦ｊ≦ｋの場合
＝０、        それ以外の場合
【００３０】
また、Ｈ２＝（ｈ２ｉ、ｊ）２ｍｘｍは、ｍｘｍ行列Ｂ＝（ｂｉ、ｊ）ｍｘｍとｍｘｍ恒等行列の並置で構成される。これを式で表現すれば、次の通りである。
【００３１】
ｈ２ｉ、ｊ  ＝ｂｉ、ｊ      ｉ≦ｍの場合
＝１、        ｉ＞ｍ、ｊ＝ｉ−ｍの場合
＝０、        それ以外の場合
この時、ｂｉ、ｊは、次のように定められる。
【００３２】
ｂｉ、ｊ    ＝１、        １≦ｉ≦ｍ、ｊ＝ｍ＋１−ｉの場合
＝１、        ｋ＋２≦ｉ≦ｍ、ｊ＝ｉ−１の場合
＝１、        ｉ＝ｋ＋１、ｊ＝ｍの場合
＝０または１、ｋ＋４≦ｉ≦ｍ、ｋ＋２≦ｊ≦ｉ−２の場合
＝０、        それ以外の場合
【００３３】
上記のような規則で生成された第１ハッシュ関数Ｈ１及び第２ハッシュ関数Ｈ２は、次のような２つの性質を有する。
【００３４】
〔性質１〕
まず、第１ハッシュ関数Ｈ１及び第２ハッシュ関数Ｈ２は、最大のバンク間分散次数を有する。すなわち、Ｋｅｒ（Ｈ１）∩Ｋｅｒ（Ｈ２）＝｛０｝であり、Ｈ１（ｘ）＝Ｈ２（ｘ）＝０であるｘ∈｛０、１｝２ｍが０しかない。
【００３５】
〔性質２〕
第１ハッシュ関数Ｈ１及び第２ハッシュ関数Ｈ２は、行、列、対角線、反対角線及び矩形パターンで衝突対が生じない。具体的には、次の（１）乃至（５）を満足する。
【００３６】
（１）第１ハッシュ関数Ｈ１及び第２ハッシュ関数Ｈ２は、行パターンで衝突対がない。すなわち、ｘ∈｛０、１｝２ｍをｍビットずつ分けて各々行インデックス及び列インデックスとする時、行インデックスが同一である場合、第１ハッシュ関数Ｈ１及び第２ハッシュ関数Ｈ２の関数値は、互いに異なる。これを数式で表現すれば、次の通りである。
【００３７】
Ｈ＝Ｈ１またはＨ２とする時、ｘ１≠ｘ２であり、ＶｅｃＴｏＩｎｔ（Ｌ（ｘ１））＝ＶｅｃｔｏＩｎｔ（Ｌ（ｘ２））なら、Ｈ（ｘ１）≠Ｈ（ｘ２）である。
【００３８】
但し、ｘ∈｛０、１｝２ｍである時、Ｌ（ｘ）∈｛０、１｝ｍは、ｘの前のｍ個の成分を選択した値であり、ＶｅｃＴｏＩｎｔ関数は、長さｍである二進ベクトルを２ｍ未満の自然数に変換する関数である。すなわち、ＶｅｃＴｏＩｎｔ（［ａｍ、…ａｉ、…ａ１］）＝２ｍ−１ａｍ＋…＋２ｉ−１ａｉ＋…＋ａ１である。
【００３９】
（２）第１ハッシュ関数Ｈ１及び第２ハッシュ関数Ｈ２は、列パターンで衝突対がない。
【００４０】
すなわち、ｘ∈｛０、１｝２ｍをｍビットずつ分けて各々行インデックス及び列インデックスとする時、列インデックスが同一である場合、第１ハッシュ関数Ｈ１及び第２ハッシュ関数Ｈ２の関数値は、互いに異なる。これを数式で表現すれば、次の通りである。
【００４１】
Ｈ＝Ｈ１またはＨ２とする時、ｘ１≠ｘ２であり、ＶｅｃＴｏＩｎｔ（Ｍ（ｘ１））＝ＶｅｃｔｏＩｎｔ（Ｍ（ｘ２））なら、Ｈ（ｘ１）≠Ｈ（ｘ２）である。
【００４２】
但し、ｘ∈｛０、１｝２ｍである時、Ｍ（ｘ）∈｛０、１｝ｍは、ｘの後のｍ個の成分を選択した値である。
【００４３】
（３）第１ハッシュ関数Ｈ１及び第２ハッシュ関数Ｈ２は、対角線パターンで衝突対がない。
【００４４】
すなわち、ｉ≠ｊなら、Ｈ（（ＩｎｔＴｏＶｅｃ（ｉ）、ＩｎｔＴｏＶｅｃ（ｉ））≠Ｈ（（ＩｎｔＴｏＶｅｃ（ｊ）、ＩｎｔＴｏＶｅｃ（ｊ））である。
【００４５】
但し、ＩｎｔＴｏＶｅｃ関数は、ＶｅｃＴｏＩｎｔの逆関数であって、２ｍ未満の自然数を長さｍである二進ベクトルに変換する関数である。すなわち、ＩｎｔＴｏＶｅｃ（２ｍ−１ａｍ＋…＋２ｉ−１ａｉ＋…＋ａ１）＝［ａｍ、…ａｉ、…ａ１］である。
【００４６】
（４）第１ハッシュ関数Ｈ１及び第２ハッシュ関数Ｈ２は、反対角線パターンで衝突対がない。
【００４７】
すなわち、ｉ≠ｊなら、Ｈ（（ＩｎｔＴｏＶｅｃ（ｉ）、ＩｎｔＴｏＶｅｃ（２ｍ−１−ｉ））≠Ｈ（（ＩｎｔＴｏＶｅｃ（ｊ）、ＩｎｔＴｏＶｅｃ（２ｍ−１−ｊ））である。
【００４８】
（５）第１ハッシュ関数Ｈ１及び第２ハッシュ関数Ｈ２は、矩形パターンで衝突対がない。
【００４９】
すなわち、各々のｒ（０≦ｒ≦ｍ）に対して次が成立する。
【００５０】
ｘ１、ｘ２∈｛０、１｝２ｍ、ｘ１≠ｘ２であり、０≦ＶｅｃＴｏＩｎｔ（Ｌ（ｘ１））、ＶｅｃＴｏＩｎｔ（Ｌ（ｘ２））２ｒ、０≦ＶｅｃＴｏＩｎｔ（Ｍ（ｘ１））、ＶｅｃＴｏＩｎｔ（Ｍ（ｘ２））２ｍ−ｒなら、Ｈ（ｘ１）≠Ｈ（ｘ２）である。
【００５１】
したがって、第１ハッシュ関数Ｈ１及び第２ハッシュ関数Ｈ２は、２−ウェイスキュードアソシエイティブキャッシュにおいて優れたヒットレートを保証することができる。
【００５２】
以上において説明した本発明は、本発明が属する技術の分野における通常の知識を有する者であれば、本発明の技術的思想を逸脱しない範囲内で、様々な置換、変形及び変更が可能であるので、上述した実施例及び添付された図面に限定されるものではない。
【図面の簡単な説明】
【００５３】
【図１】本発明の一実施例に係るキャッシュメモリの構成を示すブロック図である。
【図２】本発明の一実施例に係る第１ハッシュ関数及び第２ハッシュ関数を示す図である。
【符号の説明】
【００５４】
１１０  ＣＰＵ
１２０  キャッシュメモリ
１３０  第１ハッシュ関数モジュール
１４０  第２ハッシュ関数モジュール
１５０  第１比較器
１６０  第２比較器
１７０  第１バンク
１８０  第２バンク
【図１】
0004374059.tif 000005
【図２】
0004374059.tif 000006