(57)【特許請求の範囲】
【請求項１】
第１データブロックの先頭記憶アドレスがメモリバスビット幅に揃うかを判断することと、
前記第１データブロックの先頭記憶アドレスがメモリバスビット幅に揃わないのであれば、前記第１データブロックの１つ前のデータブロックである第２データブロックの圧縮があったかを判断することと、
前記第２データブロックの圧縮があったのであれば、前記第１データブロックの先頭ビートに対し、ビット幅が前記メモリバスビット幅に等しい完全書き込みを実行することとを含むことを特徴とするデータ書き込み方法。
【請求項２】
前記第１データブロックの先頭ビートに対し完全書き込みを実行した後に、
前記第１データブロックの先頭ビートのマスクを、完全書き込みを示すマスクに修正することをさらに含むことを特徴とする請求項１に記載の方法。
【請求項３】
前記の前記第２データブロックの圧縮があったのであれば、前記第１データブロックの先頭ビートに対し、完全書き込みを実行することは、
前記第２データブロックの圧縮があったのであれば、前記第２データブロックのオリジナル長さと前記第２データブロックの圧縮後の圧縮長さに基づいて、前記第２データブロックに圧縮利得が存在するかを判断し、そうである場合、前記第１データブロックの先頭ビートに対し完全書き込みを実行することを含むことを特徴とする請求項１に記載の方法。
【請求項４】
前記第１データブロックの先頭記憶アドレスがメモリバスビット幅に揃わないのであれば、第２データブロックの圧縮があったかを判断することは、
前記第１データブロックの先頭記憶アドレスがメモリバスビット幅に揃わないのであれば、前記第１データブロックの記憶アドレスと前記第２データブロックの記憶アドレスとは連続な記憶アドレスであるかを判断し、そうである場合、第２データブロックの圧縮があったかを判断することを含むことを特徴とする請求項１に記載の方法。
【請求項５】
前記第１データブロックの末尾記憶アドレスがメモリバスビット幅に揃うかを判断することと、
前記第１データブロックの末尾記憶アドレスがメモリバスビット幅に揃わないのであれば、前記第１データブロックの圧縮があったかを判断することと、
前記第１データブロックの圧縮があったのであれば、前記第１データブロックの末尾ビートに対し完全書き込みを実行することとをさらに含む請求項１〜３のいずれか一項に記載の方法。
【請求項６】
第１データブロックの先頭記憶アドレスがメモリバスビット幅に揃うかを判断するための第１判断モジュールと、
前記第１データブロックの先頭記憶アドレスがメモリバスビット幅に揃わないのであれば、前記第１データブロックの１つ前のデータブロックである第２データブロックの圧縮があったかを判断するための第２判断モジュールと、
前記第２データブロックの圧縮があったのであれば、前記第１データブロックの先頭ビートに対し、ビット幅が前記メモリバスビット幅に等しい完全書き込みを実行するための第１書き込みモジュールとを含むことを特徴とするデータ書き込み装置。
【請求項７】
前記第１データブロックの先頭ビートのマスクを、完全書き込みを示すマスクに修正するための修正モジュールをさらに含むことを特徴とする請求項６に記載の装置。
【請求項８】
前記第１書き込みモジュールは、
前記第２データブロックの圧縮があったのであれば、前記第２データブロックのオリジナル長さと前記第２データブロックの圧縮後の圧縮長さに基づいて、前記第２データブロックに圧縮利得が存在するかを判断し、そうである場合、前記第１データブロックの先頭ビートに対し完全書き込みを実行することに用いられることを特徴とする請求項６に記載の装置。
【請求項９】
前記第２判断モジュールは、
前記第１データブロックの先頭記憶アドレスがメモリバスビット幅に揃わないのであれば、前記第１データブロックの記憶アドレスと前記第２データブロックの記憶アドレスとは連続な記憶アドレスであるかを判断し、そうである場合、第２データブロックの圧縮があったかを判断することに用いられることを特徴とする請求項６に記載の装置。
【請求項１０】
前記第１データブロックの末尾記憶アドレスがメモリバスビット幅に揃うかを判断するための第３判断モジュールと、
前記第１データブロックの末尾記憶アドレスがメモリバスビット幅に揃わないのであれば、前記第１データブロックの圧縮があったかを判断するための第４判断モジュールと、
前記第１データブロックの圧縮があったのであれば、前記第１データブロックの末尾ビートに対し完全書き込みを実行するための第２書き込みモジュールとをさらに含む請求項６〜９のいずれか一項に記載の装置。
【請求項１１】
コンピュータ指令が格納されている非一時的コンピュータ読み取り可能な記憶媒体であって、
前記コンピュータ指令は、請求項１〜５のいずれか一項に記載の方法を前記コンピュータに実行させることに用いられることを特徴とする非一時的コンピュータ読み取り可能な記憶媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本願は、コンピュータ技術のデータ読み取り／書き込み技術分野に係り、特にデータ書き込み方法、装置および記憶媒体に係る。
【背景技術】
【０００２】
データのメモリへの書き込みは、よくある動作であり、たとえばニューラルネットワークを例にとると、ニューラルネットワーク計算はニューラルネットワークプロセッサＮＰＵ（Ｎｅｕｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）内で行われることが多く、ニューラルネットワーク計算後に計算結果をオフチップメモリに書き込む必要がある。しかしながら、現在のメモリへのデータの書き込み動作は、書き込みデータのビット幅がメモリバスビット幅よりも小さい部分書き込みの回数が多すぎる場合がある。現在のメモリへのデータの書き込み性能は比較的悪いことが分かる。
【発明の概要】
【発明が解決しようとする課題】
【０００３】
本願は、データ書き込み方法、装置および電子機器を提供し、メモリへのデータの書き込み性能が比較的悪いという問題を解決しようとする。
【課題を解決するための手段】
【０００４】
第１方面では、本願は、データ書き込み方法を提供する。当該方法において、第１データブロックの先頭記憶アドレスがメモリバスビット幅に揃うかを判断することと、前記第１データブロックの先頭記憶アドレスがメモリバスビット幅に揃わないのであれば、前記第１データブロックの１つ前のデータブロックである第２データブロックの圧縮があったかを判断することと、前記第２データブロックの圧縮があったのであれば、前記第１データブロックの先頭ビートに対し、ビット幅が前記メモリバスビット幅に等しい完全書き込みを実行することとを含む。
【０００５】
上記ステップにより、前記第１データブロックの先頭ビートに対し部分書き込みから完全書き込みへの調整が実現され、メモリへのデータの書き込み性能を高める。
【０００６】
選択可能に、前記第１データブロックの先頭ビートに対し完全書き込みを実行した後に、前記方法において、前記第１データブロックの先頭ビートのマスクを、完全書き込みを示すマスクに修正することをさらに含む。
【０００７】
前記第１データブロックの先頭ビートのマスクを、完全書き込みを示すマスクに修正するため、第１データブロックの先頭ビートが完全書き込みであることをマスクから特定でき、後続のデータ読み取りおよび管理を容易にする。
【０００８】
選択可能に、前記第２データブロックの圧縮があったのであれば、前記第１データブロックの先頭ビートに対し、完全書き込みを実行することは、前記第２データブロックの圧縮があったのであれば、前記第２データブロックのオリジナル長さと前記第２データブロックの圧縮後の圧縮長さに基づいて、前記第２データブロックに圧縮利得が存在するかを判断し、圧縮利得が存在する場合、前記第１データブロックの先頭ビートに対し完全書き込みを実行することを含む。
【０００９】
圧縮利得が存在する場合にのみにおいて、第１データブロックの先頭ビートの完全書き込みを実行するため、書き込み動作のミスを避け、さらにメモリの書き込み性能を高める。
【００１０】
選択可能に、前記第１データブロックの先頭記憶アドレスがメモリバスビット幅に揃わないのであれば、第２データブロックの圧縮があったかを判断することは、前記第１データブロックの先頭記憶アドレスがメモリバスビット幅に揃わないのであれば、前記第１データブロックの記憶アドレスと前記第２データブロックの記憶アドレスとは連続な記憶アドレスであるかを判断し、連続な記憶アドレスである場合、第２データブロックの圧縮があったかを判断することを含む。
【００１１】
第１データブロックの記憶アドレスと第２データブロックの記憶アドレスとは連続な記憶アドレスである場合のみにおいて、後続の対応動作を実行するため、第１データブロックと第２データブロックとは記憶アドレスが連続するデータブロックではない場合に、第２データブロックの圧縮状況に基づいて第１データブロックの完全書き込みを実行することに起因する書き込みミスを避けることができる。
【００１２】
選択可能に、前記方法において、前記第１データブロックの末尾記憶アドレスがメモリバスビット幅に揃うかを判断することと、前記第１データブロックの末尾記憶アドレスがメモリバスビット幅に揃わないのであれば、前記第１データブロックの圧縮があったかを判断することと、前記第１データブロックの圧縮があったのであれば、前記第１データブロックの末尾ビートに対し完全書き込みを実行することとをさらに含む。
【００１３】
前記第１データブロックの末尾ビートに対し完全書き込みを実行するため、さらにメモリの書き込み性能を高めることができる。
【００１４】
第２方面では、本願は、第１データブロックの先頭記憶アドレスがメモリバスビット幅に揃うかを判断するための第１判断モジュールと、前記第１データブロックの先頭記憶アドレスがメモリバスビット幅に揃わないのであれば、前記第１データブロックの１つ前のデータブロックである第２データブロックの圧縮があったかを判断するための第２判断モジュールと、前記第２データブロックの圧縮があったのであれば、前記第１データブロックの先頭ビートに対し、ビット幅が前記メモリバスビット幅に等しい完全書き込みを実行するための第１書き込みモジュールとを含むデータ書き込み装置を提供する。
【００１５】
選択可能に、前記装置は、前記第１データブロックの先頭ビートのマスクを、完全書き込みを示すマスクに修正するための修正モジュールをさらに含む。
【００１６】
選択可能に、前記第１書き込みモジュールは、前記第２データブロックの圧縮があったのであれば、前記第２データブロックのオリジナル長さと前記第２データブロックの圧縮後の圧縮長さに基づいて、前記第２データブロックに圧縮利得が存在するかを判断し、圧縮利得が存在する場合、前記第１データブロックの先頭ビートに対し完全書き込みを実行することに用いられる。
【００１７】
選択可能に、前記第２判断モジュールは、前記第１データブロックの先頭記憶アドレスがメモリバスビット幅に揃わないのであれば、前記第１データブロックの記憶アドレスと前記第２データブロックの記憶アドレスとは連続な記憶アドレスであるかを判断し、連続な記憶アドレスである場合、第２データブロックの圧縮があったかを判断することに用いられる。
【００１８】
選択可能に、前記装置は、前記第１データブロックの末尾記憶アドレスがメモリバスビット幅に揃うかを判断するための第３判断モジュールと、前記第１データブロックの末尾記憶アドレスがメモリバスビット幅に揃わないのであれば、前記第１データブロックの圧縮があったかを判断するための第４判断モジュールと、前記第１データブロックの圧縮があったのであれば、前記第１データブロックの末尾ビートに対し完全書き込みを実行するための第２書き込みモジュールとをさらに含む。
【００１９】
第３方面では、本願は、電子機器を提供する。当該電子機器は、少なくとも１つのプロセッサと、前記少なくとも１つのプロセッサと通信可能に接続するメモリとを含み、前記メモリには、前記少なくとも１つのプロセッサによって実行可能な指令が格納され、前記指令が前記少なくとも１つのプロセッサによって実行されることによって、本願によるデータ書き込み方法を前記少なくとも１つのプロセッサに実行させることを可能にする。
【００２０】
第４方面では、本願は、コンピュータ指令が格納されている非一時的コンピュータ読み取り可能な記憶媒体を提供し、前記コンピュータ指令は、本願によるデータ書き込み方法を前記コンピュータに実行させることに用いられる。
【発明の効果】
【００２１】
本願の前記一実施例は、以下の利点および有益な効果を有する。
第１データブロックの先頭記憶アドレスがメモリバスビット幅に揃うかを判断することと、前記第１データブロックの先頭記憶アドレスがメモリバスビット幅に揃わないのであれば、前記第１データブロックの１つ前のデータブロックである第２データブロックの圧縮があったかを判断することと、前記第２データブロックの圧縮があったのであれば、前記第１データブロックの先頭ビートに対し完全書き込みを実行することとを含む。したがって、メモリの書き込み性能が比較的に悪いという技術問題を克服し、さらにメモリへのデータの書き込み性能を高めるという技術効果を達成する。
【００２２】
上記の選択可能な形態によるほかの効果は、以下、具体的な実施例に関連して説明される。
【図面の簡単な説明】
【００２３】
図面は、本解決策をより良く理解するために使用され、本願を限定するものではない。
【図１】本願によるデータ書き込み方法のフローチャートである。
【図２】本願によるデータサブブロックの分割概略図である。
【図３】本願による別のデータ書き込み方法のフローチャートである。
【図４】本願によるデータ書き込みの概略図である。
【図５】本願による別のデータ書き込み方法のフローチャートである。
【図６】本願によるデータ書き込み装置の構造図である。
【図７】本願によるデータ書き込み装置の構造図である。
【図８】本願によるデータ書き込み装置の構造図である。
【図９】本願の実施例に係るデータ書き込み方法による電子機器のブロック図である。
【発明を実施するための形態】
【００２４】
以下、理解に役立つための本願の実施例の様々な細部を含めて本願の例示的な実施例は、図面に基づいて説明されるが、例示的なものに過ぎないとされるべきである。したがって、当業者は、本願の範囲および趣旨から逸脱することなく、ここに記載された実施例に様々な変更および修正を加えることができることを認識するであろう。また、説明の明確化および簡略化のため、以下の記載では、周知の機能および構成についての記載は、省略する。
【００２５】
図１を参照する。図１は、本願によるデータ書き込み方法のフローチャートであり、図１に示すように、以下のステップを含む。
【００２６】
ステップＳ１０１において、第１データブロックの先頭記憶アドレスがメモリバスビット幅に揃うかを判断する。
【００２７】
本願では、データブロックは、ニューラルネットワークでの搬送データのデータサブブロックであり、たとえば、ニューラルネットワーク計算を実行して得られるデータであり、たとえば重み行列または特徴マップ（ｆｅａｔｕｒｅ  ｍａｐ）などのデータのデータサブブロックである。かつ、データサブブロックは、上記搬送データを分割して得られるデータサブブロックである。たとえば、図２に示すように、搬送データを、ベースブロック、アラインメントブロックおよびリマッピングレスブロックのようなデータサブブロックに分割することができる。ここで、ベースブロック毎のデータサイズは固定であり、この固定サイズは予め配置されていてもよく、具体的には、実際のニーズに応じて配置することができる。アラインメントブロックおよびリマッピングレスブロックは、搬送データブロックを複数のベースブロックに分割した後に残ったベースブロックを構成できないサブブロックである。具体的には、図２に示すように、右に残ったサブブロックをアラインメントブロック、下に残ったサブブロックをリマッピングレスブロックと呼ぶ。
【００２８】
さらに、上記第１データブロックは、ベースブロックであってもよい。
【００２９】
なお、本願では、データブロックをニューラルネットワークのデータブロックに限定せず、それ以外の、書き込み動作の実行が必要なデータブロックであってもよい。
【００３０】
また、上記記憶アドレスは、データブロックのメモリにおける記憶アドレスである。
【００３１】
ステップＳ１０２において、前記第１データブロックの先頭記憶アドレスがメモリバスビット幅に揃わないのであれば、前記第１データブロックの１つ前のデータブロックである第２データブロックの圧縮があったかを判断する。
【００３２】
上記第２データブロックの圧縮があったかを判断することは、第２データブロックの長さ情報に基づいて判断するか、第２データブロックを処理する際に、圧縮があれば第２データブロックに標識を付け、圧縮があったことを標識する。
【００３３】
さらに、第１データブロックの先頭記憶アドレスがメモリバスビット幅に揃う場合、直接に前記第１データブロックの先頭ビート（ｂｅａｔ）に対し完全書き込みを実行する。
【００３４】
また、第２データブロックの圧縮がなかったと判断すると、前記第１データブロックの先頭ビートに対し部分書き込みを実行する。
【００３５】
ステップＳ１０３において、前記第２データブロックの圧縮があったのであれば、前記第１データブロックの先頭ビートに対し、ビット幅が前記メモリバスビット幅に等しい完全書き込みを実行する。
【００３６】
ここで、前記第１データブロックの先頭ビートに対し完全書き込みを実行することは、第１データブロックの先頭ビートに書き込んだデータのビット幅がメモリバスビット幅に等しい。
【００３７】
なお、本願による上記方法は、ニューラルネットワーク計算用のチップ（またはプロセッサと呼ぶ）、たとえば、ニューラルネットワークプロセッサＮＰＵ（Ｎｅｕｒａｌ  ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）やハードウェアアクセラレータに適用可能である。かつこの場合、上記メモリは、オフチップメモリであってもよい。すなわち、上記方法は、ニューラルネットワーク計算用のチップが、第１データブロックをオフチップメモリに書き込む。もちろん、これに限定されるものではなく、データの書き込みを行う電子機器にも適用可能である。
【００３８】
本実施例において、上記ステップでは、第１データブロックの先頭記憶アドレスがメモリバスビット幅に揃わないため、第１データブロックの先頭ビートが元々部分書き込みであるが、第２データブロックの圧縮があったため、前記第１データブロックの先頭ビートに対し完全書き込みを実行し、さらに、前記第１データブロックの先頭ビートに対し部分書き込みから完全書き込みに調整することを実現することによって、メモリへのデータの書き込み性能を高める。
【００３９】
図３を参照する。図３は、本願による別のデータ書き込み方法のフローチャートであり、図３に示すように、以下のステップを含む。
【００４０】
ステップＳ３０１において、第１データブロックの先頭記憶アドレスがメモリバスビット幅に揃うかを判断する。
【００４１】
ステップＳ３０２において、前記第１データブロックの先頭記憶アドレスがメモリバスビット幅に揃わないのであれば、前記第１データブロックの１つ前のデータブロックである第２データブロックの圧縮があったかを判断する。
【００４２】
ここで、前記第１データブロックの先頭記憶アドレスがメモリバスビット幅に揃わないのであれば、第２データブロックの圧縮があったかを判断することは、第１データブロックの先頭記憶アドレスがメモリバスビット幅に揃わないのであれば、第２データブロックがベースブロックであるかを判断し、ベースブロックである場合、第２データブロックの圧縮があったかを判断する。もちろん、これについて限定せず、直接判断してもよい。
【００４３】
選択可能に、前記第１データブロックの先頭記憶アドレスがメモリバスビット幅に揃わないのであれば、第２データブロックの圧縮があったかを判断することは、前記第１データブロックの先頭記憶アドレスがメモリバスビット幅に揃わないのであれば、前記第１データブロックの記憶アドレスと前記第２データブロックの記憶アドレスとは連続な記憶アドレスであるかを判断し、連続な記憶アドレスである場合、第２データブロックの圧縮があったかを判断することを含む。
【００４４】
第１データブロックの記憶アドレスと第２データブロックの記憶アドレスとは連続な記憶アドレスである場合のみにおいて、後続の対応動作を実行するため、第１データブロックと第２データブロックとは記憶アドレスが連続するデータブロックではない場合に、第２データブロックの圧縮状況に基づいて第１データブロックの完全書き込みを実行することに起因する書き込みミスを避けることができる。
【００４５】
ステップＳ３０３において、前記第２データブロックの圧縮があったのであれば、前記第１データブロックの先頭ビートに対し、ビット幅が前記メモリバスビット幅に等しい完全書き込みを実行する。
【００４６】
前記第２データブロックの圧縮があったのであれば、前記第１データブロックの先頭ビートに対し完全書き込みを実行することは、第２データブロックの圧縮があったのであれば、第１データブロックの先頭記憶アドレスが位置する第１行記憶アドレスの前段の記憶アドレスが無効記憶アドレス（無効データ部分と呼ばれてもよい）であると確定し、当該無効記憶アドレスに第１データブロックのデータを書き込む。ここで、前段の記憶アドレスは、元々第１データブロックの記憶アドレスであり、無効記憶アドレスは、第２データブロックを圧縮した後に不要になる記憶アドレスと理解できる。たとえば、図４に示すように、第１データブロックはデータブロックｂであり、第２データブロックはデータブロックａである。データブロックａを圧縮して５行目の白い部分が無効記憶アドレスになり、この無効記憶アドレスにデータブロックｂのデータを書き込む。
【００４７】
選択可能に、前記第２データブロックの圧縮があったのであれば、前記第１データブロックの先頭ビートに対し、完全書き込みを実行することは、前記第２データブロックの圧縮があったのであれば、前記第２データブロックのオリジナル長さと前記第２データブロックの圧縮後の圧縮長さに基づいて、前記第２データブロックに圧縮利得が存在するかを判断し、圧縮利得が存在する場合、前記第１データブロックの先頭ビートに対し完全書き込みを実行することを含む。
【００４８】
ここで、上記第２データブロックのオリジナル長さと第２データブロックの圧縮後の圧縮長さは、第２データブロックの圧縮処理をする際に得られる長さ情報である。
【００４９】
また、前記第２データブロックのオリジナル長さと前記第２データブロックの圧縮後の圧縮長さに基づいて、前記第２データブロックに圧縮利得が存在するかを判断することは、第２データブロックの圧縮後の圧縮長さが第２データブロックのオリジナル長さより小さくなるかを判断し、そうであれば第２データブロックに圧縮利得が存在すると判断し、逆の場合に、圧縮利得が存在しないと決定する。または、前記第２データブロックのオリジナル長さに基づいて、前記第２データブロックの伝送に必要なビート数を確定するとともに、第２データブロックの圧縮後の圧縮長さに基づいて、第２データブロックの圧縮後のデータ伝送に必要なビート数を確定し、前記第２データブロックの圧縮後のデータ伝送に必要なビート数が、第２データブロックの伝送に必要なビート数より小さくなると、第２データブロックに圧縮利得が存在すると判断し、逆の場合に、圧縮利得が存在しないと判断する。
【００５０】
このように、一部のデータブロックが圧縮されたにもかかわらず圧縮利得が存在しないという問題を避けることができる。
【００５１】
さらに、前記第２データブロックに圧縮利得が存在しないのであれば、前記第１データブロックの先頭ビートに対し部分書き込みを実行する。
【００５２】
さらに、前記第２データブロックのオリジナル長さと前記第２データブロックの圧縮後の圧縮長さに基づいて、第２データブロックの圧縮利得が、第１データブロックの先頭記憶アドレスとメモリバスビット幅境界との間のアドレス領域より大きくなるかを判断し、大きくなる場合、前記第１データブロックの先頭ビートに対し完全書き込みを実行し、小さくなる場合、部分書き込みを実行する。もちろん、この判断をしなくてもよい。実際の応用で圧縮利得が存在するのであれば、圧縮利得が、先頭記憶アドレスとメモリバスビット幅境界との間のアドレス領域より大きくなることが多いからである。
【００５３】
当該実施形態において、圧縮利得が存在する場合のみにおいて、第１データブロックの先頭ビートに対し完全書き込みを実行するため、書き込み動作のミスを避け、さらにメモリの書き込み性能を高める。
【００５４】
選択可能に、前記第１データブロックの先頭ビートに対し完全書き込みを実行した後に、前記方法において、前記第１データブロックの先頭ビートのマスクを、完全書き込みを示すマスクに修正することをさらに含む。
【００５５】
ここで、前記第１データブロックの先頭ビートのマスクを、完全書き込みを示すマスクに修正することは、第１データブロックの先頭ビートのマスクをすべて１に修正して完全書き込みを示す。もちろん、これについて限定せず、たとえばほかの数値で完全書き込みを示してもよい。
【００５６】
前記第１データブロックの先頭ビートのマスクを、完全書き込みを示すマスクに修正するため、第１データブロックの先頭ビートが完全書き込みであることをマスクから確定し、後続のデータ読み取りおよび管理を容易にすることができる。また、毎回、データブロックの１つ前のデータブロックの関連情報のみをバッファーするため、追加的に記憶記録する必要がある情報は少ない。かつデータマスク処理時の論理が単純で、余分な論理の増加が少ない。
【００５７】
選択可能に、図３に示すように、上記方法は、前記第１データブロックの末尾記憶アドレスがメモリバスビット幅に揃うかを判断するステップＳ３０４と、前記第１データブロックの末尾記憶アドレスがメモリバスビット幅に揃わないのであれば、前記第１データブロックの圧縮があったかを判断するステップＳ３０５と、前記第１データブロックの圧縮があったのであれば、前記第１データブロックの末尾ビートに対し完全書き込みを実行するステップＳ３０６とをさらに含む。
【００５８】
ここで、前記第１データブロックの末尾記憶アドレスは、第１データブロックの末尾ビートの末尾アドレスである。さらに、本願では、前記第１データブロックの先頭ビートの書込み動作を実行した後、中間の１つまたは複数のビートの書込みを継続して実行してもよく、かつそれらのビートの書込みは、すべて完全書込みであってもよい。
【００５９】
前記第１データブロックの圧縮があったのであれば、前記第１データブロックの末尾ビートに対し完全書き込みを実行することは、第１データブロックが圧縮されているため、末尾ビートが存在する行の末尾記憶アドレスの後の記憶アドレスが、第１データブロックを圧縮した後に不要になる記憶アドレスであり、当該箇所にランダムな数値を書き込んでもデータ全体の正確性に影響を与えないため、直接に完全書き込みを実行することができる。
【００６０】
また、前記第１データブロックの末尾記憶アドレスがメモリバスビット幅に揃うのであれば、直接に完全書き込みを実行する。第１データブロックの圧縮がなければ、直接に部分書き込みを実行する。
【００６１】
当該実施形態において、第１データブロックの末尾ビートに対して完全書き込みが実行されるので、メモリの書き込み性能がさらに高められる。
【００６２】
以下では、第１データブロックおよび第２データブロックが図４に示されるベースブロックであることを例とする。
【００６３】
ベースブロックａについて、先頭ビートの最初の１６Ｂは、他のデータによって占有され、最適化ができない。末尾ビートは、圧縮を経てちょうど６４Ｂに揃い、部分書き込みが存在せず、最適化を必要としない。
【００６４】
ベースブロックＢについて、先頭ビートの最初の１６Ｂは、ベースブロックａの無効データ部分である。ベースブロックＢを処理するとき、ベースブロックａは、既に処理済みであり、かつこの１６Ｂは、既知の無効データ部分であることが知られている。このとき、部分書き込みを最適化し、すなわち直接に完全書き込みでベースブロックｂのデータをメモリに書き込む。末尾ビートは、圧縮を経てちょうど６４Ｂに揃い、部分書き込みが存在せず、最適化を必要としない。
【００６５】
アラインメントブロックｃについて、先頭ビートの最初の１６Ｂは、ベースブロックＢの無効データ部分である。アラインメントブロックｃを処理するとき、ベースブロックＢは、既に処理済みであり、かつこの１６Ｂは、既知の無効データ部分であることが知られている。このとき、部分書き込みを最適化し、すなわち直接に完全書き込みでアラインメントブロックｃのデータをメモリに書き込む。末尾ビートは、揃わないが、末尾の４８Ｂがベースブロックｄの有効部分であり、最適化は行われず、メモリコントローラによる書き込みタスク統合によって、ベースブロックｄの先頭ビートと共に最適化が行われる。
【００６６】
ベースブロックｄについて、先頭ビートの最初の１６Ｂは、アラインメントブロックｃによって占有され、最適化されず、メモリコントローラによる書き込みタスク統合によって、アラインメントブロックｃの末尾ビートと共に最適化される。末尾ビートは、揃わないが、末尾の数個のバイトは、ベースブロックｄ自体の無効データ部分であり、部分書き込みを最適化することができ、すなわち、直接に完全書き込みでベースブロックｄのデータをメモリに書き込む。
【００６７】
ベースブロックｅについて、前後の揃わない部分が共に圧縮後に生じる無効データであるため、直接に部分書き込みを最適化し、完全書き込みでデータをメモリに書き込む。
【００６８】
アラインメントブロックｆとリマッピングレスブロックｇについても、同様の処理が行われる。
【００６９】
圧縮後に無効データを格納する記憶位置へ余分なデータの書き込みに限ってデータ誤りが生じないので、この方式の重要なステップは、各サブブロックの揃わない部分が無効データであるかを記録および計算する必要があり、そこへの書き込みが有効データの上書きをもたらさないと判断される場合、元の書き込みコマンドのデータマスク部分を修正して、部分書き込みを完全書き込みに拡張することである。
【００７０】
図５を参照する。図５は、本願による別のデータ書き込み方法のフローチャートであり、図５に示すように、以下のステップを含む。
【００７１】
ステップＳ５０１において、現在のサブブロック（たとえば上記第１データブロックまたはベースブロックｂ）の処理を通常の圧縮ステップで完成してその圧縮後長さを得、サブブロックに対応するデータマスクを算出する。
【００７２】
当該ステップは、サブブロックがベースブロックであれば、同時にその圧縮後長さを得、サブブロックに対応するデータマスクを算出するようにしてもよい。
【００７３】
ステップＳ５０２において、現在のサブブロックの先頭記憶アドレスが揃っているかを判断し、そうである場合、ステップＳ５０３を実行し、逆の場合、ステップＳ５０７を実行する。
【００７４】
ステップＳ５０３において、１つ前のサブブロック（たとえば上記第２データブロックまたはベースブロックａ）について、現在のサブブロックの記憶アドレスとは連続するかを判断し、そうである場合、ステップＳ５０４を実行し、逆の場合、ステップＳ５０７を実行する。
【００７５】
ステップＳ５０４において、１つ前のサブブロックがベースブロックであるかを判断し、そうである場合、ステップＳ５０５を実行し、逆の場合、ステップＳ５０７を実行する。
【００７６】
ステップＳ５０５において、１つ前のサブブロックの圧縮があったかを判断し、そうである場合、ステップＳ５０６実行し、逆の場合、ステップＳ５０７を実行する。当該ステップは、具体的には、圧縮利得を有するかを判断する。
【００７７】
ステップＳ５０６において、現在のサブブロックの先頭ビートデータのマスクをすべて１でフィリングし、すなわち部分書き込みを完全書き込みに変更する。
【００７８】
ステップＳ５０７において、先頭ビートと中間の各ビートのデータ書き込みを完成する。
【００７９】
ステップＳ５０８において、現在のサブブロックの末尾記憶アドレスが揃っているかを判断し、そうでなければステップＳ５０９を実行し、逆の場合、ステップＳ５０１３を実行する。
【００８０】
ステップＳ５０９において、現在のサブブロックがベースブロックであるかを判断し、そうである場合、ステップＳ５０１０を実行し、逆の場合、ステップＳ５０１３を実行する。
【００８１】
ステップＳ５０１０において、現在のサブブロックの圧縮があったかを判断し、そうである場合、ステップＳ５０１１を実行し、逆の場合、ステップＳ５０１２を実行する。当該ステップは、具体的には、圧縮利得を有するかを判断する。
【００８２】
ステップＳ５０１１において、現在のサブブロックの末尾ビートデータのマスクをすべて１でフィリングし、すなわち部分書き込みを完全書き込みに変更する。
【００８３】
ステップＳ５０１２において、末尾ビートのデータ書き込みを完成する。
【００８４】
ステップＳ５０１３において、現在のサブブロックについて、処理が必要である最後のサブブロックであるかを判断し、そうである場合、処理ステップを終了し、逆の場合、次のサブブロックの処理を開始し、ステップＳ５０１の実行を開始する。
【００８５】
本実施例において、メモリの書き込み性能を最適化することができる。
【００８６】
図６を参照する。図６は、本願によるデータ書き込み装置の構造図である。図６に示すように、データ書き込み装置６００は、第１データブロックの先頭記憶アドレスがメモリバスビット幅に揃うかを判断するための第１判断モジュール６０１と、前記第１データブロックの先頭記憶アドレスがメモリバスビット幅に揃わないのであれば、前記第１データブロックの１つ前のデータブロックである第２データブロックの圧縮があったかを判断するための第２判断モジュール６０２と、前記第２データブロックの圧縮があったのであれば、前記第１データブロックの先頭ビートに対し、ビット幅が前記メモリバスビット幅に等しい完全書き込みを実行するための第１書き込みモジュール６０３とを含む。
【００８７】
選択可能に、図７に示すように、前記装置は、前記第１データブロックの先頭ビートのマスクを、完全書き込みを示すマスクに修正するための修正モジュール６０４をさらに含む。
【００８８】
選択可能に、前記第１書き込みモジュール６０３は、前記第２データブロックの圧縮があったのであれば、前記第２データブロックのオリジナル長さと前記第２データブロックの圧縮後の圧縮長さに基づいて、前記第２データブロックに圧縮利得が存在するかを判断し、そうである場合、前記第１データブロックの先頭ビートに対し完全書き込みを実行することに用いられる。
【００８９】
選択可能に、前記第２判断モジュール６０２は、前記第１データブロックの先頭記憶アドレスがメモリバスビット幅に揃わないのであれば、前記第１データブロックの記憶アドレスと前記第２データブロックの記憶アドレスとは連続な記憶アドレスであるかを判断し、そうである場合、第２データブロックの圧縮があったかを判断することに用いられる。
【００９０】
選択可能に、図８に示すように、前記装置は、前記第１データブロックの末尾記憶アドレスがメモリバスビット幅に揃うかを判断するための第３判断モジュール６０５と、前記第１データブロックの末尾記憶アドレスがメモリバスビット幅に揃わないのであれば、前記第１データブロックの圧縮があったかを判断するための第４判断モジュール６０６と、前記第１データブロックの圧縮があったのであれば、前記第１データブロックの末尾ビートに対し完全書き込みを実行するための第２書き込みモジュール６０７とをさらに含む。
【００９１】
なお、上記装置は、ＮＰＵやハードウェアアクセラレータなどのニューラルネットワーク計算用のチップであってもよい。
【００９２】
本実施例による装置は、図１と図３に示す方法実施例で実現される各プロセスを実現可能であり、かつ同じ技術効果を達成することができるため、重複を避けるためにここでは説明を省略する。
【００９３】
本願の実施例に基づき、本願は、電子機器および読み取り可能な記憶媒体をさらに提供する。
【００９４】
図９は、本願の実施例に係るデータ書き込み方法に基づく電子機器のブロック図である。電子機器は、ラップトップコンピュータ、デスクトップコンピュータ、ワークステーション、パーソナルデジタルアシスタント、サーバ、ブレードサーバ、メインフレームコンピュータ、および他の適切なコンピュータなどの様々な形態のデジタルコンピュータを表すことが意図される。電子機器は、また、パーソナルデジタルプロセシング、セルラー電話、スマートフォン、ウェアラブルデバイス、および他の同様のコンピューティングデバイスなど、様々な形態のモバイルデバイスを表してもよい。本明細書に示される構成要素、それらの接続および関係、並びにそれらの機能は、単なる例であり、本明細書に記載および／または特許請求される本願の実施を限定することを意図しない。
【００９５】
図９に示すように、当該電子機器は、１つまたは複数のプロセッサ９０１と、メモリ９０２と、各構成要素を接続するための、高速インターフェースと低速インターフェースとを含むインターフェースとを含む。各構成要素は、異なるバスで互いに接続され、共通のマザーボード上に実装されてもよいし、必要に応じてほかの形態で実装されてもよい。プロセッサは、インターフェースに結合されたディスプレイデバイスなどの外部入出力装置上にＧＵＩのグラフィカル情報を表示するために、メモリ内またはメモリ上に記憶された指令を含む電子機器内で実行される指令を処理できる。他の実施形態では、複数のプロセッサおよび／または複数のバスが、必要に応じて、複数のメモリとともに使用されてもよい。また、複数の電子機器が接続され、各機器が必要な動作の一部を提供するようにしてもよい（たとえば、サーバアレイ、ブレードサーバ群、マルチプロセッサシステムとする）。図９では、１つのプロセッサ９０１を例に挙げている。
【００９６】
メモリ９０２は、本願において提供される非一時的コンピュータ読み取り可能な記憶媒体である。前記メモリには、少なくとも１つのプロセッサによって実行可能な指令が格納され、本願において提供されるデータ書き込み方法を前記少なくとも１つのプロセッサに実行させる。本願の非一時的コンピュータ読み取り可能な記憶媒体には、本願において提供されるデータ書き込み方法をコンピュータに実行させるためのコンピュータ指令が格納されている。
【００９７】
メモリ９０２は、非一時的コンピュータ読み取り可能な記憶媒体として機能し、非一時的ソフトウェアプログラム、非一時的コンピュータ実行可能プログラム、および、本願の実施例におけるデータ書き込み方法に対応するプログラム指令／モジュール（たとえば、図６に示される６０１、第２判断モジュール６０２および第１書き込みモジュール６０３）などのモジュールを記憶するために使用される。プロセッサ９０１は、メモリ９０２に格納された非一時的ソフトウェアプログラム、指令、モジュールを実行することにより、サーバの各種の機能アプリケーションやデータ処理を実行し、すなわち、上述した方法実施例におけるデータ書き込み方法を実現する。
【００９８】
メモリ９０２は、オペレーティングシステム、少なくとも１つの機能に必要なアプリケーションを記憶することができるプログラム記憶領域と、データ書き込み方法を実行する電子機器の使用に応じて作成されたデータ等を記憶することができるデータ記憶領域とを含むことができる。さらに、メモリ９０２は、高速ランダムアクセスメモリを含んでもよく、また、少なくとも１つの磁気ディスク記憶装置、フラッシュメモリデバイス、または他の非一時的固体記憶デバイスなどの、非一時的メモリを含んでもよい。いくつかの実施形態において、メモリ９０２は、任意選択で、プロセッサ９０１に対してリモートに配置されたメモリを含んでもよい。これらのリモートメモリは、データ書き込み方法を実行する電子機器にネットワークを介して接続されてもよい。上記ネットワークの例としては、インターネット、イントラネット、ローカルエリアネットワーク、移動体通信ネットワーク、およびこれらの組み合わせが挙げられるが、これらに限定されない。
【００９９】
データ書き込み方法を実行する電子機器は、入力装置９０３と出力装置９０４とをさらに備えてもよい。プロセッサ９０１、メモリ９０２、入力装置９０３、出力装置９０４は、バスまたはその他の方式で接続されてもよいが、図９ではバスで接続されている例を示している。
【０１００】
入力装置９０３は、数字または文字情報の入力を受信し、データ書き込み方法を実行する電子機器のユーザ設定および機能制御に関するキー信号入力を生成することができる。入力装置９０３は、例えば、タッチスクリーン、キーパッド、マウス、トラックパッド、タッチパッド、ポインティングスティック、１つ以上のマウスボタン、トラックボール、ジョイスティックなどである。出力装置９０４は、ディスプレイ装置、補助照明装置（たとえば、ＬＥＤ）、および触覚フィードバック装置（たとえば、振動モータ）などを含んでもよい。当該表示装置は、液晶ディスプレイ（ＬＣＤ）、発光ダイオード（ＬＥＤ）ディスプレイ、およびプラズマディスプレイを含むが、これらに限定されない。いくつかの実施形態では、表示装置は、タッチスクリーンであってもよい。
【０１０１】
ここで説明するシステムおよび技術の様々な実施形態は、デジタル電子回路システム、集積回路システム、特定用途向けＡＳＩＣ（特定用途向け集積回路）、コンピュータハードウェア、ファームウェア、ソフトウェア、および／またはそれらの組み合わせにおいて実現される。これらの様々な実施形態は、１つまたは複数のコンピュータプログラムで実施することを含む。当該１つまたは複数のコンピュータプログラムは、少なくとも１つのプログラマブルプロセッサを含むプログラマブルシステム上で実行および／または解釈可能である。当該プログラマブルプロセッサは、専用または汎用のプログラマブルプロセッサであり、記憶システム、少なくとも１つの入力装置、および少なくとも１つの出力装置からデータおよび指令を受信し、当該記憶システム、当該少なくとも１つの入力装置、および当該少なくとも１つの出力装置にデータおよび指令を伝送することができる。
【０１０２】
これらのコンピュータプログラム（プログラム、ソフトウェア、ソフトウェアアプリケーション、またはコードとも呼ばれる）は、プログラマブルプロセッサの機械指令を含み、これらのコンピュータプログラムは、プロセスおよび／またはオブジェクト指向プログラミング言語、および／またはアセンブリ／機械言語で実施される。本明細書で使用される「機械読み取り可能な媒体」および「コンピュータ読み取り可能な媒体」は、機械読み取り可能な信号としての機械指令を受信する機械読み取り可能な媒体を含む、プログラマブルプロセッサに機械指令および／またはデータを提供するための任意のコンピュータプログラム製品、機器、および／または装置（たとえば、磁気ディスク、光学ディスク、メモリ、プログラマブル論理デバイス（ＰＬＤ））を指す。「機械読み取り可能な信号」という用語は、機械指令および／またはデータをプログラマブルプロセッサに提供するために使用される任意の信号を指す。
【０１０３】
ユーザとのやり取りを提供するために、ここに記載されたシステムおよび技術は、ユーザに情報を表示するための表示装置（たとえば、ＣＲＴ（陰極線管）またはＬＣＤ（液晶ディスプレイ）モニタ）と、ユーザがコンピュータに入力を提供することができるキーボードおよびポインティングデバイス（たとえば、マウスまたはトラックボール）とを有するコンピュータ上で実施される。他の種類の装置を使用して、ユーザとのやり取りを提供してもよい。たとえば、ユーザに提供されるフィードバックは、任意の形態の感覚フィードバック（たとえば、視覚フィードバック、聴覚フィードバック、または触覚フィードバック）であってもよい。任意の形態（音入力、音声入力、または触覚入力）でユーザからの入力を受信してもよい。
【０１０４】
ここに記載のシステムおよび技術は、バックエンド構成要素を含むコンピューティングシステム（たとえば、データサーバとして）、またはミドルウェア構成要素を含むコンピューティングシステム（たとえば、アプリケーションサーバ）、またはフロントエンド構成要素を含むコンピューティングシステム（たとえば、ユーザがここに記載のシステムおよび技術の実施形態とやり取りするグラフィカルユーザインターフェースまたはウェブブラウザを有するユーザコンピュータ）、またはそのようなバックエンド構成要素、ミドルウェア構成要素、またはフロントエンド構成要素の任意の組み合わせを含むコンピューティングシステムにおいて実施される。システムの構成要素は、任意の形式または媒体のデジタルデータ通信（たとえば、通信ネットワーク）によって互いに接続される。通信ネットワークとしては、たとえば、ローカルエリアネットワーク（ＬＡＮ）、ワイドエリアネットワーク（ＷＡＮ）、インターネット等が挙げられる。
【０１０５】
コンピュータシステムは、クライアントおよびサーバを含む。クライアントおよびサーバは、一般に、互いから離れており、通常、通信ネットワークを介してやりとりする。クライアントとサーバの関係は、それぞれのコンピュータ上で実行され、互いにクライアント−サーバ関係を有するコンピュータプログラムによって生成される。
【０１０６】
本願の実施例の技術的手段によれば、本願では、前記第１データブロックの先頭ビートに対し部分書き込みから完全書き込みに調整するため、メモリの書き込み性能を高める。
【０１０７】
上記に示された様々な形態のフローが、ステップの順序変更、追加、または削除のために使用されることが理解されるべきである。たとえば、本願に記載された各ステップは、並列に実行されても、順次的に実行されても、異なる順序で実行されてもよいが、本願に開示された技術的解決手段の所望の結果を実現できる限り、本明細書に限定されない。
【０１０８】
上記の具体的な実施形態は、本願の保護範囲を制限するようには構成されない。当業者であれば、設計の要件やほかの要素に応じて、様々な修正、組み合わせ、サブ組み合わせ、置換を行うことが明らかである。本願の思想および原理に含まれるあらゆる変更、均等置換および改良等は、本願の範囲に含まれるものとする。
【図１】
0006914402.tif 000002
【図２】
0006914402.tif 000003
【図３】
0006914402.tif 000004
【図４】
0006914402.tif 000005
【図５】
0006914402.tif 000006
【図６】
0006914402.tif 000007
【図７】
0006914402.tif 000008
【図８】
0006914402.tif 000009
【図９】
0006914402.tif 000010