(57)【要約】      （修正有）【課題】人工知能チップの機能を向上させる命令実行方法を提供する。【解決手段】人工知能チップは、命令メモリ、データメモリ、及び一以上の汎用実行コンポーネントと専用実行コンポーネントを備える。命令メモリは、少なくとも一つのコードブロックを含むカーネルコードを受信する。汎用実行コンポーネントは、コードブロックを受信し、該コードブロックに関連する専用実行コンポーネントをロックし、該コードブロックの命令を、ロックされた専用実行コンポーネントに送信する。専用実行コンポーネントは、受信した命令を実行して実行結果をデータメモリに記憶する。データメモリは、専用実行コンポーネントから送信された実行結果を記憶する。カーネルコード実行期間においてＣＰＵとの頻繁な通信を回避するとともに、専用実行コンポーネントを頻繁なロック／ロック解除を回避できる。【選択図】図２
2020027613.tif 000002
【特許請求の範囲】
【請求項１】
命令メモリ、データメモリ、少なくとも一つの汎用実行コンポーネント及び少なくとも一つの専用実行コンポーネントを備える人工知能チップであって、
命令メモリは、中央処理ユニットから送信されたカーネルコードを受信するように構成され、前記カーネルコードは少なくとも一つのコードブロックを含み、前記少なくとも一つのコードブロックにおけるコードブロックは汎用実行コンポーネント及び専用実行コンポーネントと関連し、
汎用実行コンポーネントは、コードブロックを受信し、受信されたコードブロックに関連する専用実行コンポーネントをロックするとともに、受信されたコードブロックにおける命令を、ロックされた専用実行コンポーネントに送信するように構成され、
専用実行コンポーネントは、汎用実行コンポーネントから送信された命令を受信し、受信された命令を実行するとともに、実行結果をデータメモリに記憶するように構成され、
データメモリは、専用実行コンポーネントから送信された実行結果を記憶するように構成される、
人工知能チップ。
【請求項２】
前記少なくとも一つのコードブロックにおけるコードブロックは、第１命令及び第２命令セットを含み、
汎用実行コンポーネントは具体的に、
コードブロックが受信されたことに応答して、第１命令を実行することで、受信されたコードブロックに関連する専用実行コンポーネントをロックし、
第２命令セットにおける第２命令を、ロックされた専用実行コンポーネントに順次送信するように構成される請求項１に記載の人工知能チップ。
【請求項３】
前記少なくとも一つのコードブロックにおけるコードブロックは、第１命令及び第２命令セットを含み、
汎用実行コンポーネントは具体的に、
コードブロックが受信されたことに応答して、第１命令を実行することで、受信されたコードブロックに関連する少なくとも一つの専用実行コンポーネントをロックし、
第２命令セットにおける第２命令に対して、ロックされた専用実行コンポーネントから、当該第２命令を実行するための専用実行コンポーネントを確定し、確定された専用実行コンポーネントに当該第２命令を送信するように構成される請求項１に記載の人工知能チップ。
【請求項４】
前記人工知能チップは、少なくとも一つのローカル変数の値が記憶されたローカル制御メモリをさらに備え、
ローカル制御メモリは、
汎用実行コンポーネントから送信された、所定ローカル変数の目標値を含むローカル変数更新請求を受信し、
前記所定ローカル変数の値を前記目標値に更新するように構成される請求項１に記載の人工知能チップ。
【請求項５】
ローカル制御メモリはさらに、前記少なくとも一つの汎用実行コンポーネントに、前記所定ローカル変数の更新通知を送信するように構成され、
前記所定ローカル変数の更新を待機する汎用実行コンポーネントはさらに、前記通知が受信されたことに応答して、受信されたコードブロックにおける命令を継続して実行するように構成される請求項４に記載の人工知能チップ。
【請求項６】
汎用実行コンポーネントはさらに、
目標ローカル変数の値が更新されているか否かをポーリング方式で検出し、
前記目標ローカル変数の値の更新が検出されたことに応答して、受信されたコードブロックにおける命令を継続して実行するように構成される請求項４に記載の人工知能チップ。
【請求項７】
前記人工知能チップは、少なくとも一つの計算クラスタをさらに備え、前記少なくとも一つの計算クラスタにおける計算クラスタ、データメモリ、少なくとも一つの汎用実行コンポーネント及び少なくとも一つの専用実行コンポーネントを含む請求項１に記載の人工知能チップ。
【請求項８】
前記人工知能チップはグローバル制御メモリをさらに備え、計算クラスタはローカル制御メモリをさらに備え、前記グローバル制御メモリに少なくとも一つのグローバル変数の値が記憶され、ローカル制御メモリに少なくとも一つのローカル変数の値が記憶され、
前記グローバル制御メモリは、
計算クラスタから送信された、所定グローバル変数の目標値を含むグローバル変数更新請求を受信し、
前記所定グローバル変数の値を前記目標値に更新するように構成される請求項７に記載の人工知能チップ。
【請求項９】
前記グローバル制御メモリはさらに、少なくとも一つの前記ローカル制御メモリに前記所定グローバル変数の更新通知を送信するように構成され、
前記所定グローバル変数の更新を待機するローカル制御メモリはさらに、前記通知が受信されたことに応答して、前記所定グローバル変数に関連するローカル変数の値を更新するように構成される請求項８に記載の人工知能チップ。
【請求項１０】
ローカル制御メモリはさらに、
目標グローバル変数の値が更新されているか否かをポーリング方式で検出し、
前記目標グローバル変数の値の更新が検出されたことに応答して、前記所定グローバル変数に関連するローカル変数の値を更新するように構成される請求項８に記載の人工知能チップ。
【請求項１１】
前記カーネルコードが実行される間は、汎用実行コンポーネントによりロックされた専用実行コンポーネントはロック解除されない請求項１に記載の人工知能チップ。
【請求項１２】
汎用実行コンポーネントはさらに、第１命令を実行した後、第２命令セットを循環実行するように構成される請求項２又は３に記載の人工知能チップ。
【請求項１３】
前記カーネルコードは、入力されたデータフロー図を前記中央処理ユニットにより解析して得られたものであり、前記データフロー図は、ニューラルネットワークモデルに対する静的マップによってマッピングして得られたものである請求項１に記載の人工知能チップ。
【請求項１４】
人工知能チップに用いられる命令実行方法であって、前記人工知能チップは、命令メモリ、データメモリ、少なくとも一つの汎用実行コンポーネント及び少なくとも一つの専用実行コンポーネントを備え、命令メモリは中央処理ユニットに通信可能に接続され、
前記方法は、
前記命令メモリからのコードブロックを受信するステップであって、前記コードブロックは、前記中央処理ユニットから送信されたカーネルコードの中から前記命令メモリにより取得されたものであり、前記コードブロックは専用実行コンポーネントと関連する、ステップと、
前記コードブロックに関連する専用実行コンポーネントをロックするステップと、
前記コードブロックの中の命令を、ロックされた専用実行コンポーネントに送信するステップであって、専用実行コンポーネントは、受信された命令を実行するとともに、実行結果を前記データメモリに記憶するように構成されている、ステップとを含む人工知能チップに用いられる命令実行方法。
【請求項１５】
前記人工知能チップは、少なくとも一つのローカル変数の値が記憶されたローカル制御メモリをさらに備え、
前記方法は、
目標ローカル変数の更新通知が受信されたことに応答して、前記コードブロック中の命令を継続して実行することをさらに含む請求項１４に記載の方法。
【請求項１６】
前記人工知能チップは、少なくとも一つのローカル変数の値が記憶されたローカル制御メモリをさらに備え、
前記方法は、
目標ローカル変数の値が更新されているか否かをポーリング方式で検出することと、
前記目標ローカル変数の値の更新が検出されたことに応答して、前記コードブロック中の命令を継続して実行することとをさらに含む請求項１４に記載の方法。
【請求項１７】
人工知能チップに用いられる命令実行装置であって、前記人工知能チップは、命令メモリ、データメモリ、少なくとも一つの汎用実行コンポーネント及び少なくとも一つの専用実行コンポーネントを備え、命令メモリは中央処理ユニットに通信可能に接続され、
前記装置は、
前記命令メモリからのコードブロックを受信するように構成されたコード受信ユニットであって、前記コードブロックは、前記中央処理ユニットから送信されたカーネルコードの中から前記命令メモリにより取得されたものであり、前記コードブロックは専用実行コンポーネントと関連する、コード受信ユニットと、
前記コードブロックに関連する専用実行コンポーネントをロックするように構成されたロックユニットと、
前記コードブロック中の命令を、ロックされた専用実行コンポーネントに送信するように構成された命令送信ユニットであって、専用実行コンポーネントは、受信された命令を実行するとともに、実行結果を前記データメモリに記憶するように構成されている、命令送信ユニットとを含む、人工知能チップに用いられる命令実行装置。
【請求項１８】
コンピュータプログラムが記憶されたコンピュータ可読媒体であって、前記コンピュータプログラムが実行ユニットにより実行されるときに請求項１４〜１６のいずれか１項に記載の方法を実現する、コンピュータ可読媒体。
【請求項１９】
中央処理ユニット、記憶装置および少なくとも一つの請求項１〜１３のいずれか１項に記載の人工知能チップを備える電子機器。
【発明の詳細な説明】
【技術分野】
【０００１】
本願の実施形態は、コンピュータ技術分野に関し、具体的に、人工知能チップ及び人工知能チップに用いられる命令実行方法に関する。
【背景技術】
【０００２】
人工知能技術の急速な発展に伴い、ニューラルネットワークモデルの規模もますます大きくなり、トレーニングデータもますます多くなり、これにより専用のニューラルネットワークアクセラレータを利用してニューラルネットワークのトレーニング及び予測計算を行うことが主流傾向となっている。したがって、ＧＰＵ（Ｇｒａｐｈｉｃｓ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ、グラフィックプロセッサ）、ＦＰＧＡ（Ｆｉｅｌｄ−Ｐｒｏｇｒａｍｍａｂｌｅ  Ｇａｔｅ  Ａｒｒａｙ、フィールド・プログラマブル・ゲート・アレイ）、ＡＳＩＣ（Ａｐｐｌｉｃａｔｉｏｎ  Ｓｐｅｃｉｆｉｃ  Ｉｎｔｅｇｒａｔｅｄ  Ｃｉｒｃｕｉｔｓ、特定用途向け集積回路）などのような、様々なニューラルネットワークアクセラレータが開発された。
【０００３】
これらのニューラルネットワークアクセラレータは、ニューラルネットワーク中の典型的な、高計算集約型の計算タスク（例えば、行列計算（又は行列計算に係る積和）、活性化演算、ベクトル演算など）に対して特殊な最適化を行うことができる。一般的に、ニューラルネットワークアクセラレータは複数の異なる実行ユニットを内蔵することができ、各実行ユニットは異なる計算タスクを実行することができ、ホストコンピュータのＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ、中央処理ユニット）がスケジューリング実行を担当する。
【０００４】
従来の技術において、ＧＰＵがニューラルネットワークモデルにおける計算集約型のタスクを担当し、ＣＰＵがＧＰＵの動作を制御することを担当していた。例として、ＣＰＵはユーザ定義の静的計算図に記述された深度学習モデルを解析し、演算タスクシーケンスを取得することを担当し、一つの演算タスクをＧＰＵに送信し、その後ＧＰＵが演算タスクを実行したことを待って、次の演算タスクをＧＰＵに送信し、…、このように実行していく。
【発明の概要】
【発明が解決しようとする課題】
【０００５】
本願の実施形態は、人工知能チップ及び人工知能チップに用いられる命令実行方法を開示する。
【課題を解決するための手段】
【０００６】
第１の態様として、本願実施形態は人工知能チップを提供する。当該人工知能チップは、命令メモリ、データメモリ、少なくとも一つの汎用実行コンポーネント及び少なくとも一つの専用実行コンポーネントを備え、命令メモリは、中央処理ユニットから送信されたカーネルコードを受信するように構成され、前記カーネルコードは少なくとも一つのコードブロックを含み、前記少なくとも一つのコードブロックにおけるコードブロックは汎用実行コンポーネント及び専用実行コンポーネントと関連し、汎用実行コンポーネントは、コードブロックを受信し、受信されたコードブロックに関連する専用実行コンポーネントをロックするとともに、受信されたコードブロックにおける命令を、ロックされた専用実行コンポーネントに送信するように構成され、専用実行コンポーネントは、汎用実行コンポーネントから送信された命令を受信し、受信された命令を実行するとともに、実行結果をデータメモリに記憶するように構成され、データメモリは、専用実行コンポーネントから送信された実行結果を記憶するように構成される。
【０００７】
一部実施形態では、少なくとも一つのコードブロックにおけるコードブロックは、第１命令及び第２命令セットを含み、汎用実行コンポーネントは具体的に、コードブロックが受信されたことに応答して、第１命令を実行することで、受信されたコードブロックに関連する専用実行コンポーネントをロックし、第２命令セットにおける第２命令を、ロックされた専用実行コンポーネントに順次送信するように構成される。
【０００８】
一部実施形態では、少なくとも一つのコードブロックにおけるコードブロックは、第１命令及び第２命令セットを含み、汎用実行コンポーネントは具体的に、コードブロックが受信されたことに応答して、第１命令を実行することで、受信されたコードブロックに関連する少なくとも一つの専用実行コンポーネントをロックし、第２命令セットにおける第２命令に対して、ロックされた専用実行コンポーネントから、当該第２命令を実行するための専用実行コンポーネントを確定し、確定された専用実行コンポーネントに当該第２命令を送信するように構成される。
【０００９】
一部実施形態では、人工知能チップは、少なくとも一つのローカル変数の値が記憶されたローカル制御メモリをさらに備え、ローカル制御メモリは、汎用実行コンポーネントから送信された、所定ローカル変数の目標値を含むローカル変数更新請求を受信し、前記所定ローカル変数の値を前記目標値に更新するように構成される。
【００１０】
一部実施形態では、ローカル制御メモリはさらに、前記少なくとも一つの汎用実行コンポーネントに、前記所定ローカル変数の更新通知を送信するように構成され、前記所定ローカル変数の更新を待機する汎用実行コンポーネントはさらに、前記通知が受信されたことに応答して、受信されたコードブロックにおける命令を継続して実行するように構成される。
【００１１】
一部実施形態では、汎用実行コンポーネントはさらに、目標ローカル変数の値が更新されているか否かをポーリング方式で検出し、前記目標ローカル変数の値の更新が検出されたことに応答して、受信されたコードブロックにおける命令を継続して実行するように構成される。
【００１２】
一部実施形態では、人工知能チップは、少なくとも一つの計算クラスタをさらに備え、前記少なくとも一つの計算クラスタにおける計算クラスタ、データメモリ、少なくとも一つの汎用実行コンポーネント及び少なくとも一つの専用実行コンポーネントを含む。
【００１３】
一部実施形態では、人工知能チップはグローバル制御メモリをさらに備え、計算クラスタはローカル制御メモリをさらに備え、前記グローバル制御メモリに少なくとも一つのグローバル変数の値が記憶され、ローカル制御メモリに少なくとも一つのローカル変数の値が記憶され、前記グローバル制御メモリは、計算クラスタから送信された、所定グローバル変数の目標値を含むグローバル変数更新請求を受信し、前記所定グローバル変数の値を前記目標値に更新するように構成される。
【００１４】
一部実施形態では、グローバル制御メモリはさらに、少なくとも一つの前記ローカル制御メモリに前記所定グローバル変数の更新通知を送信するように構成され、前記所定グローバル変数の更新を待機するローカル制御メモリはさらに、前記通知が受信されたことに応答して、前記所定グローバル変数に関連するローカル変数の値を更新するように構成される。
【００１５】
一部実施形態では、ローカル制御メモリはさらに、目標グローバル変数の値が更新されているか否かをポーリング方式で検出し、前記目標グローバル変数の値の更新が検出されたことに応答して、前記所定グローバル変数に関連するローカル変数の値を更新するように構成される。
【００１６】
一部実施形態では、カーネルコードが実行される間は、汎用実行コンポーネントによりロックされた専用実行コンポーネントはロック解除されない。
【００１７】
一部実施形態では、汎用実行コンポーネントはさらに、第１命令を実行した後、第２命令セットを循環実行するように構成される。
【００１８】
一部実施形態では、カーネルコードは、入力されたデータフロー図を前記中央処理ユニットにより解析して得られたものであり、前記データフロー図は、ニューラルネットワークモデルに対する静的マップによってマッピングして得られたものである。
【００１９】
第２の態様として、本願の実施形態は人工知能チップに用いられる命令実行方法を提供する。前記人工知能チップは、命令メモリ、データメモリ、少なくとも一つの汎用実行コンポーネント及び少なくとも一つの専用実行コンポーネントを備え、命令メモリは中央処理ユニットに通信可能に接続され、前記方法は、前記命令メモリからのコードブロックを受信するステップであって、前記コードブロックは、前記中央処理ユニットから送信されたカーネルコードの中から前記命令メモリにより取得されたものであり、前記コードブロックは専用実行コンポーネントと関連する、ステップと、前記コードブロックに関連する専用実行コンポーネントをロックするステップと、前記コードブロックの中の命令を、ロックされた専用実行コンポーネントに送信するステップであって、専用実行コンポーネントは、受信された命令を実行するとともに、実行結果を前記データメモリに記憶するように構成されている、ステップとを含む。
【００２０】
一部実施形態では、コードブロックは第１命令及び第２命令セットを含み、コードブロックに関連する専用実行コンポーネントをロックすることは、第１命令を実行して、コードブロックに関連する専用実行コンポーネントをロックすることを含み、コードブロック中の命令をロックされた専用実行コンポーネントに送信することは、第２命令セットにおける第２命令を、ロックされた専用実行コンポーネントに順次送信することを含む。
【００２１】
一部実施形態では、コードブロックは第１命令及び第２命令セットを含み、コードブロックに関連する専用実行コンポーネントをロックすることは、第１命令を実行して、コードブロックに関連する少なくとも一つの専用実行コンポーネントをロックすることを含み、コードブロック中の命令をロックされた専用実行コンポーネントに送信することは、第２命令セットにおける第２命令に対して、ロックされた専用実行コンポーネントから、当該第２命令を実行する専用実行コンポーネントを確定し、確定された専用実行コンポーネントに当該第２命令を送信することを含む。
【００２２】
一部実施形態では、人工知能チップは、少なくとも一つのローカル変数の値が記憶されたローカル制御メモリをさらに備え、ローカル制御メモリは、汎用実行コンポーネントから送信された、所定ローカル変数の目標値を含むローカル変数の更新請求を受信し、所定ローカル変数の値を目標値に更新するように構成される。
【００２３】
一部実施形態では、人工知能チップは、少なくとも一つのローカル変数の値が記憶されたローカル制御メモリをさらに備え、当該方法は、目標ローカル変数の更新通知が受信されたことに応答して、コードブロック中の命令を継続して実行することをさらに含む。
【００２４】
一部実施形態では、人工知能チップは、少なくとも一つのローカル変数の値が記憶されたローカル制御メモリをさらに備え、当該方法は、目標ローカル変数の値が更新されているか否かをポーリング方式で検出し、目標ローカル変数の値の更新が検出されたことに応答して、コードブロック中の命令を継続して実行することをさらに含む。
【００２５】
一部実施形態では、人工知能チップは、少なくとも一つの計算クラスタをさらに備え、少なくとも一つの計算クラスタにおける計算クラスタは、データメモリ、少なくとも一つの汎用実行コンポーネント及び少なくとも一つの専用実行コンポーネントを含む。
【００２６】
一部実施形態では、人工知能チップはグローバル制御メモリをさらに備え、計算クラスタはローカル制御メモリをさらに備え、グローバル制御メモリに少なくとも一つのグローバル変数の値が記憶され、ローカル制御メモリに少なくとも一つのローカル変数の値が記憶され、グローバル制御メモリは、計算クラスタから送信された、所定グローバル変数の目標値を含むグローバル変数更新請求を受信し、所定グローバル変数の値を目標値に更新するように構成される。
【００２７】
一部実施形態では、グローバル制御メモリはさらに、少なくとも一つのローカル制御メモリに所定グローバル変数の更新通知を送信するように構成され、所定グローバル変数の更新を待機するローカル制御メモリはさらに、通知が受信されたことに応答して、所定グローバル変数に関連するローカル変数の値を更新するように構成される。
【００２８】
一部実施形態では、ローカル制御メモリはさらに、目標グローバル変数の値が更新されているか否かをポーリング方式で検出し、目標グローバル変数の値の更新が検出されたことに応答して、所定グローバル変数に関連するローカル変数の値を更新するように構成される。
【００２９】
一部実施形態では、カーネルコードが実行される間、汎用実行コンポーネントにロックされた専用実行コンポーネントはロック解除されない。
【００３０】
一部実施形態では、当該方法は、第１命令を実行した後、第２命令セットを循環して実行することをさらに含む。
【００３１】
一部実施形態では、カーネルコードは、入力されたデータストリーム図を中央処理ユニットにより解析することにより取得されたものである、データストリーム図は、ニューラルネットワークモデルの静的図をマッピングすることにより取得されたものである。
【００３２】
第３の態様として、本願の実施形態は人工知能チップに用いられる命令実行装置を提供する。前記人工知能チップは、命令メモリ、データメモリ、少なくとも一つの汎用実行コンポーネント及び少なくとも一つの専用実行コンポーネントを備え、命令メモリは中央処理ユニットに通信可能に接続され、前記装置は、前記命令メモリからのコードブロックを受信するように構成されたコード受信ユニットであって、前記コードブロックは、前記中央処理ユニットから送信されたカーネルコードの中から前記命令メモリにより取得されたものであり、前記コードブロックは専用実行コンポーネントと関連する、コード受信ユニットと、前記コードブロックに関連する専用実行コンポーネントをロックするように構成されたロックユニットと、前記コードブロック中の命令を、ロックされた専用実行コンポーネントに送信するように構成された命令送信ユニットであって、専用実行コンポーネントは、受信された命令を実行するとともに、実行結果を前記データメモリに記憶するように構成されている、命令送信ユニットとを含む。
【００３３】
一部実施形態では、コードブロックは第１命令及び第２命令セットを含み、ロックユニットは具体的に、第１命令を実行して、コードブロックに関連する専用実行コンポーネントをロックするように構成され、命令送信ユニットは具体的に、第２命令セットにおける第２命令をロックされた専用実行コンポーネントに順次送信するように構成される。
【００３４】
一部実施形態では、コードブロックは第１命令及び第２命令セットを含み、ロックユニットは具体的に、第１命令を実行して、コードブロックに関連する少なくとも一つの専用実行コンポーネントをロックするように構成され、命令送信ユニットは具体的に、第２命令セットにおける第２命令に対して、ロックされた専用実行コンポーネントから、当該第２命令を実行する専用実行コンポーネントを確定し、確定された専用実行コンポーネントに当該第２命令を送信するように構成される。
【００３５】
一部実施形態では、人工知能チップは、少なくとも一つのローカル変数の値が記憶されたローカル制御メモリをさらに備え、ローカル制御メモリは、汎用実行コンポーネントから送信された、所定ローカル変数の目標値を含むローカル変数更新請求を受信し、所定ローカル変数の値を目標値に更新するように構成される。
【００３６】
一部実施形態では、人工知能チップは、少なくとも一つのローカル変数の値が記憶されたローカル制御メモリをさらに備え、当該装置は、目標ローカル変数の更新通知が受信されたことに応答して、コードブロック中の命令を継続して実行する継続実行ユニットをさらに含む。
【００３７】
一部実施形態では、人工知能チップは、少なくとも一つのローカル変数の値が記憶されたローカル制御メモリをさらに備え、当該装置はさらに、目標ローカル変数の値が更新されているか否かをポーリング方式で検出するように構成された検出ユニットと、目標ローカル変数の値の更新が検出されたことに応答して、コードブロック中の命令を継続して実行するように構成された継続実行ユニットとを含む。
【００３８】
一部実施形態では、人工知能チップはさらに、少なくとも一つの計算クラスタを備え、少なくとも一つの計算クラスタにおける計算クラスタは、データメモリ、少なくとも一つの汎用実行コンポーネント及び少なくとも一つの専用実行コンポーネントを含む。
【００３９】
一部実施形態では、人工知能チップはグローバル制御メモリをさらに備え、計算クラスタはローカル制御メモリをさらに備え、グローバル制御メモリに少なくとも一つのグローバル変数の値が記憶され、ローカル制御メモリに少なくとも一つのローカル変数の値が記憶され、グローバル制御メモリは、計算クラスタから送信された、所定グローバル変数の目標値を含むグローバル変数更新請求を受信し、所定グローバル変数の値を目標値に更新するように構成される。
【００４０】
一部実施形態では、グローバル制御メモリはさらに、少なくとも一つのローカル制御メモリに所定グローバル変数の更新通知を送信するように構成され、所定グローバル変数の更新を待機するローカル制御メモリはさらに、通知が受信されたことに応答して、所定グローバル変数に関連するローカル変数の値を更新するように構成される。
【００４１】
一部実施形態では、ローカル制御メモリはさらに、目標グローバル変数の値が更新されているか否かをポーリング方式で検出し、目標グローバル変数の値の更新が検出されたことに応答して、所定グローバル変数に関連するローカル変数の値を更新するように構成される。
【００４２】
一部実施形態では、カーネルコードが実行される間、汎用実行コンポーネントにロックされた専用実行コンポーネントはロック解除されない。
【００４３】
一部実施形態では、当該装置は、第１命令を実行した後、第２命令セットを循環して実行するように構成された循環ユニットをさらに含む。
【００４４】
一部実施形態では、カーネルコードは、入力されたデータストリーム図を中央処理ユニットにより解析することにより取得されたものであり、データストリーム図は、ニューラルネットワークモデルの静的図をマッピングすることにより取得されたものである。
【００４５】
第４の態様として、本願実施形態は、コンピュータプログラムが記憶されており、コンピュータプログラムが実行ユニットにより実行されるとき、上記第２の態様のいずれかの実施形態に記載の方法を実現するコンピュータ可読媒体を提供する。
【００４６】
第５の態様として、本願実施形態は、中央処理ユニット、記憶装置および少なくとも一つの第１の態様のいずれかの実施形態に記載の人工知能チップを備える電子機器を提供する。
【００４７】
本願実施形態による、人工知能チップ及び人工知能チップに用いられる命令実行方法は、命令メモリが、ＣＰＵから少なくとも一つのコードブロックを含むカーネルコードを受信された後、汎用実行コンポーネントが、受信されたコードブロックに関連する専用実行コンポーネントをロックするとともに、コードブロックにおける命令を、ロックされた専用実行コンポーネントに送信し、最後に、専用実行コンポーネントが、受信された命令を実行するとともに、実行結果をデータメモリに送信して記憶する。これにより、カーネルコード実行の間、ＣＰＵと頻繁に通信を行うことを回避するとともに、専用実行コンポーネントが頻繁にロック／ロック解除されることを回避し、人工知能チップの機能を向上させることができる。
【図面の簡単な説明】
【００４８】
以下、添付図面を参照ながら非限定的実施形態を詳細に説明することで、本願のその他特徴、目的及び利点は一層明確になる。
【００４９】
【図１】本願の一実施形態により適用可能な例示的システム構造図である。
【００５０】
【図２】本願による人工知能チップの一実施形態の動作タイミング図である。
【００５１】
【図３】本願による人工知能チップの一つの適用シナリオの概略図である。
【００５２】
【図４】本願による人工知能チップの別の実施形態の動作タイミング図である。
【００５３】
【図５】本願による人工知能チップに用いられる命令実行方法の一実施形態のフローチャートである。
【００５４】
【図６】本願による人工知能チップに用いられる命令実行装置の一実施形態の構造概略図である。
【００５５】
【図７】本願の実施形態の電子機器を実現するのに適したコンピュータシステムの構造概略図である。
【発明を実施するための形態】
【００５６】
以下、添付図面及び実施形態に合わせて本願をさらに詳細に説明する。本明細書に記載された特定の実施形態は、関連本発明を解釈するためのものであり、本発明を限定するためのものではないことを理解されたい。なお、説明の便宜上、図面には関連発明に関わる部分のみ示されていることである。
【００５７】
説明すべきことは、本願における実施形態及び実施形態における特徴は、衝突しない限り、互いに組み合わせ可能であることである。以下、添付図面を参照し、実施形態に合わせて本発明を詳細に説明する。
【００５８】
図１は、本願を適用することができる人工知能チップ、人工知能チップに用いられる命令実行方法、または人工知能チップに用いられる命令実行装置の実施形態の例示的システムアーキテクチャー１００を示す。
【００５９】
図１に示すように、システムアーキテクチャー１００は、ＣＰＵ１１、人工知能（Ａｒｔｉｆｉｃｉａｌ  Ｉｎｔｅｌｌｉｇｅｎｃｅ、ＡＩ）チップ１２、およびバス１３を含むことができる。バス１３は、例えば、ＰＣＩＥ（Ｐｅｒｉｐｈｅｒａｌ  Ｃｏｍｐｏｎｅｎｔ  Ｉｎｔｅｒｃｏｎｎｅｃｔ  Ｅｘｐｒｅｓｓ、高速シリアルコンピュータ拡張バス規格）バスなどであり、ＣＰＵ１１と人工知能チップ１２との間に通信リンクを提供する媒体として用いられる。
【００６０】
ＣＰＵ１１は、バス１３を介して人工知能チップ１２とインタラクションすることで、メッセージを送受信することができる。ＣＰＵ１１は、カーネルコードを人工知能チップ１２に送信し、人工知能チップ１２から返された処理結果を受信することができる。
【００６１】
人工知能チップ１２は、ＡＩアクセラレータまたはコンピューティングカードとも呼ばれ、人工知能アプリケーションにおける大量計算集約型の計算タスクを専門的に処理するためのものである。人工知能チップ１２は、命令メモリ、データメモリ、一つ又は複数の汎用実行コンポーネント及び一つ又は複数の専用実行コンポーネントを備えることができる。命令メモリは、ＣＰＵ１１から送信されたカーネルコードを受信することができる。汎用実行コンポーネントは、命令メモリから分配されたコードブロックを受信するか又は命令メモリから関連するコードブロックを能動的に取得した後、事前に明示的に指定された専用実行コンポーネントに命令を送信することができる。専用実行コンポーネントは、受信された命令を実行し、実行結果をデータメモリに送信して記憶することができる。データメモリは、専用実行コンポーネントの命令実行結果を記憶することができる。
【００６２】
説明すべきことは、本願の実施形態による人工知能チップに用いられる命令実行方法は、一般的に汎用実行コンポーネントによって実行されるため、これに対応して、人工知能チップに用いられる命令実行装置は一般的に汎用実行コンポーネントに設けられる。
【００６３】
図１におけるＣＰＵ、バス、人工知能チップ、命令メモリ、データメモリ、汎用実行コンポーネント、および専用実行コンポーネントの数は、単なる例示であることを理解されたい。実施の必要性に応じて、任意の適切な数のＣＰＵ、バス、人工知能チップ、命令メモリ、データメモリ、汎用実行コンポーネント、および専用実行コンポーネントを有することができる。
【００６４】
続けて図２を参照し、図２は、本願による人工知能チップの一実施形態の動作タイミング２００を示す。
【００６５】
本実施形態の人工知能チップは、命令メモリ、データメモリ、少なくとも一つの汎用実行コンポーネント及び少なくとも一つの専用実行コンポーネントを備えることができる。命令メモリは、中央処理ユニットから送信されたカーネルコードを受信するように構成されてもよく、カーネルコードは少なくとも一つのコードブロックを含み、少なくとも一つのコードブロックにおけるコードブロックは汎用実行コンポーネント及び専用実行コンポーネントと関連する。汎用実行コンポーネントは、コードブロックを受信し、受信されたコードブロックと関連する専用実行コンポーネントをロックするとともに、受信されたコードブロックにおける命令を、ロックされた専用実行コンポーネントに送信するように構成されてもよい。専用実行コンポーネントは、汎用実行コンポーネントから送信された命令を受信し、受信された命令を実行するとともに、実行結果をデータメモリに記憶するように構成されてもよい。データメモリは、専用実行コンポーネントから送信された実行結果を記憶するように構成されてもよい。
【００６６】
図２に示されるように、ステップ２０１において、命令メモリは、ＣＰＵから送信されたカーネルコードを受信する。
【００６７】
本実施形態では、命令メモリ（例えば、図１に示す命令メモリ）は、ホストコンピュータのＣＰＵ（例えば、図１に示すＣＰＵ）から送信されたカーネルコードを受信することができる。ここで、カーネルコートは少なくとも一つのコードブロックを含む。前記少なくとも一つのコードブロックにおける各々のコードブロックは、一つの汎用実行コンポーネント及び一つ又は複数の専用実行コンポーネントと関連する。
【００６８】
本実施形態のいくつかの好ましい実施形態において、汎用実行コンポーネントは、例えば、ＡＲＭ（Ａｄｖａｎｃｅｄ  ＲＩＳＣ  Ｍａｃｈｉｎｅ又はＡｃｏｒｎ  ＲＩＳＣ  Ｍａｃｈｉｎｅ  、高度縮小命令セットマシン）コア、５１コア等のような、プログラミン可能な汎用計算グラフィックプロセッサを含むことができる。専用実行コンポーネントは、ニューラルネットワークモデルにおける計算集約型の計算タスク処理専用の実行コンポーネントを含むことができ、畳み込みエンジン、シングルデータプロセッサ、フラットデータプロセッサ、チャネルデータプロセッサ、専用メモリ、およびデータ再構成エンジンのうちの少なくとも１つを含むことができるが、それらに限定されない。ここで、畳み込みエンジンはニューラルネットワークモデルの畳み込み層のデータ処理に使用され、シングルデータプロセッサはニューラルネットワークモデルの活性化関数層のデータ処理に使用され、フラットデータプロセッサはニューラルネットワークモデルのプーリング層のデータ処理に使用され、チャネルデータプロセッサはニューラルネットワークモデルの標準化層のデータ処理に使用され、専用メモリとデータ再構成エンジンはテンソル再構成とメモリからメモリへの変換高速化の複写操作に用いられる。
【００６９】
本実施形態のいくつかの好ましい実施形態において、カーネルコードは、ＣＰＵが入力されたデータストリーム図を解析することで取得することができ、例えば、所定のプログラミングプロトコルに応じてデータストリーム図を特定のプログラミング言語（例えば、Ｃ  、Ｃ  ＋＋  、Ｊａｖａ（登録商標）等）のカーネルコードに変換する。ここで、データストリーム図は、ユーザが入力したニューラルネットワークモデルの静的マップをマッピングすることにより取得することができる。
【００７０】
ここで、ニューラルネットワークモデルは、人工ニューラルネットワーク（Ａｒｔｉｆｉｃｉａｌ  Ｎｅｕｒａｌ  Ｎｅｔｗｏｒｋ、ＡＮＮ）であってもよい。人工ニューラルネットワークは、人間の脳神経ネットワークに対する基本的な認識に基づいて、数学的及び物理的方法並びに情報処理の角度からヒト脳神経ネットワークを抽象化して確立されたある簡単なモデルである。
【００７１】
例えば、ニューラルネットワークモデルは、畳み込みニューラルネットワーク（Ｃｏｎｖｏｌｕｔｉｏｎａｌ  Ｎｅｕｒａｌ  Ｎｅｔｗｏｒｋ、ＣＮＮ）モデルおよびディープニューラルネットワーク（Ｄｅｅｐ  Ｎｅｕｒａｌ  Ｎｅｔｗｏｒｋ、ＤＮＮ）モデルなどを含むことができる。
【００７２】
ステップ２０２において、汎用実行コンポーネントはコードブロックを受信する。
【００７３】
本実施形態では、汎用実行コンポーネント（例えば、図１に示す汎用実行コンポーネント）は、命令メモリからのコードブロックを受信することができる。
【００７４】
ここで、汎用実行コンポーネントは関連するコードブロックを直接受信することができます。例えば、汎用実行コンポーネントは、取得請求を命令メモリに送信する必要がなく、コードブロックと汎用実行コンポーネントとの間の関連関係に従って命令メモリが発行したコードブロックを直接受信する。
【００７５】
また、汎用実行コンポーネントは、カーネルコードを直接受信された後、カーネルコードから関連するコードブロックを抽出することもできる。なお、汎用実行コンポーネントは、命令メモリに請求を送信することによって関連するコードブロックを取得することもできる。
【００７６】
本実施形態のいくつかの好ましい実施形態では、前記少なくとも１つのコードブロックにおける各々のコードブロックは、第１命令および第２命令セットを含むことができる。ここで、第１命令は、汎用実行コンポーネントにより実行されるときに、コードブロックと関連する専用実行コンポーネントをロックするために使用される。第２命令セット内の各第２命令は、専用実行コンポーネントにより実行されるときに、計算集約型の計算タスクを処理するために使用される。第２命令セット内の第２の命令は、第１命令を実行した後（すなわち、専用実行コンポーネントをロックした後）に、汎用実行コンポーネントにより専用実行コンポーネントに送信される。
【００７７】
一例として、次のコード「ｌｏｃｋ（ｄｍａ）；ｌｏａｄＤａｔａＴｏＬ２（）；」を含むコードブロックの場合、「ｌｏｃｋ（ｄｍａ）」が該コードブロックの第１命令であり、「ｌｏａｄＤａｔａＴｏＬ２（）」が当該コードブロックの第２命令である。ここで、第１命令は「ｄｍａ」という名前の専用実行コンポーネントをロックするために使用され、第２命令はデータをＬ２キャッシュにロードするために使用される。
【００７８】
本実施形態のいくつかの好ましい実施形態において、コードブロックはさらに循環セグメントを含むことができる。ここで、循環セグメントは第２命令セットを含むことができる。すなわち、第２命令セット内の各第２の命令は、第１命令が実行された後に循環して実行される。
【００７９】
一例として、次のコード「ｌｏｃｋ（ｍａｃ）；ｗｈｉｌｅ（１）｛ｃｏｎｖｏｌｕｔｉｏｎ（）；｝」を含むコードブロックの場合、「ｌｏｃｋ（ｍａｃ）」が当該コードブロックの第１命令であり、「ｗｈｉｌｅ（１）｛ｃｏｎｖｏｌｕｔｉｏｎ（）；｝」が当該コードブロックの循環セグメントであり、「ｃｏｎｖｏｌｕｔｉｏｎ（）」が循環セグメントにおける第２命令である。ここで、第１命令は「ｍａｃ」という名前の専用実行コンポーネントをロックするために使用され、第２命令は畳み込み演算を実行するために使用され、循環セグメントは第２命令を循環的に実行するために使用される（すなわち、畳み込み演算を循環して実行する）。
【００８０】
ステップ２０３において、汎用実行コンポーネントは専用実行コンポーネントをロックする。
【００８１】
本実施形態では、関連コードブロックが受信されたことに応答して、汎用実行コンポーネントは、受信されたコードブロックと関連する専用実行コンポーネントをロックすることができる。例として、汎用実行コンポーネントが以下のコード「ｌｏｃｋ（ｄｍａ）；ｌｏａｄＤａｔａＴｏＬ２（）；」を含むコードブロックを受信する場合、「ｄｍａ」という名前の専用実行コンポーネントをロックすることができる。
【００８２】
専用実行コンポーネントは任意の汎用実行コンポーネントから呼び出すことができるので、汎用実行コンポーネントが専用実行コンポーネントを呼び出すときに衝突することを回避するために、専用実行コンポーネントをロックする必要がある。汎用実行コンポーネントは、様々な適切な方法によって専用実行コンポーネントをロックすることができる。例えば、ロックのメカニズムを採用する（すなわち、各専用実行コンポーネントは呼び出し可能なロックを有することができる。ここで、ロックはソフトウェアプログラミング方法によって実施することができる）。専用実行コンポーネントのロックを呼び出すロック付け方法により専用実行コンポーネントをロックすることができる（すなわち、ロックされた専用実行コンポーネントは他の汎用実行コンポーネントにより呼び出すことができない）。
【００８３】
汎用実行コンポーネントは一つの専用実行コンポーネントをロックすることも、複数の専用実行コンポーネントをロックすることもできることに留意されたい。当業者は実際の応用シナリオの需要に基づいて設定することができ、本願はこれを具体的に限定しない。
【００８４】
ステップ２０４において、汎用実行コンポーネントはコードブロックにおける命令を専用実行コンポーネントに送信する。
【００８５】
本実施形態では、受信されたコードブロックと関連する専用実行コンポーネントをロックした後、汎用実行コンポーネントは、受信されたコードブロックにおける計算集約型タスクを処理するための命令を、ロックされた専用実行コンポーネントに送信することができる。
【００８６】
本実施形態のいくつかの好ましい実施形態では、一つの専用実行コンポーネントがロックされると、汎用実行コンポーネントは、ロックされた専用実行コンポーネントに、第２命令セット中の第２命令を実行順番で順次送信することができる。
【００８７】
本実施形態のいくつかの好ましい実施形態では、一つ以上の専用実行コンポーネントがロックされると、第２命令セットにおける各々の第２命令に対して、汎用実行コンポーネントは、まず、ロックされた専用実行コンポーネントから当該第２命令を実行する専用実行コンポーネントを確定し、その後、確定された専用実行コンポーネントに当該第２命令を送信することができる。
【００８８】
ステップ２０５において、専用実行コンポーネントは受信された命令を実行する。
【００８９】
本実施形態では、汎用実行コンポーネントによって送信された命令を受信されたことに応答して、専用実行コンポーネントは、受信された命令を実行することができる。
【００９０】
ステップ２０６において、専用実行コンポーネントは実行結果をデータメモリに送信する。
【００９１】
本実施形態では、専用実行コンポーネントは、命令実行が完了した後、実行結果をデータメモリに送信する。ここで、データメモリは、Ｌ１キャッシュ、Ｌ２キャッシュ、Ｌ３キャッシュ等を含むことができる。
【００９２】
ステップ２０７において、データメモリは実行結果を記憶する。
【００９３】
本実施形態では、データメモリは、専用実行コンポーネントの実行結果を受信し、受信された実行結果を記憶することができる。
【００９４】
図２の動作タイミングから分かるように、頻繁にロック／ロック解除される専用実行コンポーネントとは違って、本願の人工知能チップは、カーネルコードの実行期間全体において、専用実行コンポーネントが常に汎用実行コンポーネントによってロックされた状態にあるので、頻繁なロック／ロック解除のプロセスが回避され、これによって人工知能チップの性能を向上させることができる。
【００９５】
人工知能チップが一つの計算タスクを完了するたびに、ホストコンピュータのＣＰＵで実行されているアプリケーションと通信して次のタスクを受け取らなければならない場合、人工知能チップの性能が非常に高く計算タスクの実行時間が非常に短い条件では、明らかに人工知能チップの性能に影響を与える。例を挙げて説明すると、人工知能チップが１回の計算につき５ｕｓがかかるが、人工知能チップとＣＰＵとの通信に１０ｕｓの時間がかかるとすると、これは、人工知能チップの約３分の２に相当する時間がアイドル状態にあって、人工知能チップの半分以上の性能が無駄になるのと同じである。
【００９６】
しかし、本実施形態において、人工知能チップは、ＣＰＵと一度通信するだけでニューラルネットワークモデルのカーネルコードを取得することができる。しかも、カーネルコードの実行期間全体において、ＣＰＵと通信する必要がない。つまり、人工知能チップは、基本的に待ち時間がないため、人工知能チップの性能を大幅に向上させることができる。
【００９７】
引き続き図３を参照し、図３は本願による人工知能チップの一つの適用シナリオを示す。図３は、あるニューラルネットワークモデル（例えば、ヒト顔認識モデル）をマッピングすることによって得られたデータストリーム図である。当該データストリーム図において、Ｕ１〜Ｕ６はそれぞれ異なる専用実行コンポーネントを指し、矢印はデータストリームの方向を示す。当該データストリーム図を実施するカーネルコードは次のとおりである。
2020027613.tif 000003
【００９８】
ここで、上記カーネルコードは６つのコードブロック（すなわち、数字０〜５後のコードフラグメント）を含む。ＣＰＵは、上記カーネルコードを人工知能チップの命令メモリに送信する。命令メモリは、まず各汎用実行コンポーネントの識別子（命令「ｇｅｔ＿ｃｏｒｅ＿ｉｄ（）」によって取得し、ここで、識別子の値はそれぞれ数字０〜５である）を取得し、次いで、識別子が０の汎用実行コンポーネントにコードブロック「ｌｏｃｋ（Ｕ１）；  ｌｏａｄＤａｔａＴｏＬ２（）；」を送信し、識別子が１の汎用実行コンポーネントにコードブロック「ｌｏｃｋ（Ｕ２）；ｗｈｉｌｅ（１）｛ｃｏｎｖｏｌｕｔｉｏｎ（）；｝」を送信し、……、識別子が５の汎用実行コンポーネントにコードブロック「ｌｏｃｋ（Ｕ６）；．．．．．．；」を送信する。識別子が０の汎用実行コンポーネントはコードブロックが受信された後、専用実行コンポーネントＵ１をロックし、次いで、命令「ｌｏａｄＤａｔａＴｏＬ２（）」を専用実行コンポーネントＵ１に送信する。識別子が１の汎用実行コンポーネントは、コードブロックが受信された後、専用実行コンポーネントＵ２をロックし、次いで、命令「ｃｏｎｖｏｌｕｔｉｏｎ（）」を継続的に専用実行コンポーネントＵ２に送信する。このように続けて実行する。専用実行コンポーネントＵ１〜Ｕ６は、命令実行結果をデータメモリに送信して記憶させる。
【００９９】
本願の上記実施形態による、人工知能チップは、命令メモリが、ＣＰＵから少なくとも一つのコードブロックを含むカーネルコードを受信された後、汎用実行コンポーネントが、受信されたコードブロックと関連する専用実行コンポーネントをロックするとともに、コードブロックにおける命令をロックされた専用実行コンポーネントに送信し、最後に、専用実行コンポーネントが、受信された命令を実行するとともに実行結果をデータメモリに送信して記憶することにより、カーネルコード実行の間ＣＰＵと頻繁に通信することを回避するとともに、専用実行コンポーネントが頻繁にロック／ロック解除されることを回避し、人工知能チップの性能を向上させることができる。
【０１００】
続けて図４を参照し、本願による人工知能チップの他の一実施形態の動作タイミング４００を示す。
【０１０１】
本実施形態の人工知能チップは、命令メモリ、データメモリ、ローカル制御メモリ、少なくとも一つの汎用実行コンポーネント及び少なくとも一つの専用実行コンポーネントを備えることができる。命令メモリは、中央処理ユニットから送信されたカーネルコードを受信するように構成されてもよく、カーネルコードは少なくとも一つのコードブロックを含み、少なくとも一つのコードブロックにおけるコードブロックは汎用実行コンポーネント及び専用実行コンポーネントと関連する。汎用実行コンポーネントは、コードブロックを受信し、受信されたコードブロックと関連する専用実行コンポーネントをロックするとともに、受信されたコードブロックにおける命令を、ロックされた専用実行コンポーネントに送信するように構成されてもよい。専用実行コンポーネントは、汎用実行コンポーネントから送信された命令を受信し、受信された命令を実行するとともに、実行結果をデータメモリに記憶するように構成され手もよい。データメモリは、専用実行コンポーネントから送信された実行結果を記憶するように構成されてもよい。ローカル制御メモリは、少なくとも一つのローカル変数の値を記憶してもよい。ローカル制御メモリは、汎用実行コンポーネントから送信された、所定ローカル変数の目標値を含むローカル変数更新請求を受信し、所定ローカル変数の値を目標値に更新するように構成される。
【０１０２】
図４に示されるように、ステップ４０１において、命令メモリは、ＣＰＵから送信されたカーネルコードを受信する。
【０１０３】
本実施形態では、命令メモリ（例えば、図１に示す命令メモリ）は、ホストコンピュータのＣＰＵ（例えば、図１に示すＣＰＵ）から送信されたカーネルコードを受信することができる。カーネルコートは、少なくとも一つのコードブロックを含む。前記少なくとも一つのコードブロックにおける各々のコードブロックは一つの汎用実行コンポーネント及び一つ又は複数の専用実行コンポーネントと関連する。
【０１０４】
ステップ４０２において、汎用実行コンポーネントはコードブロックを受信する。
【０１０５】
本実施形態では、汎用実行コンポーネント（例えば、図１に示す汎用実行コンポーネント）は、命令メモリからのコードブロックを受信することができる。
【０１０６】
ステップ４０３において、汎用実行コンポーネントは専用実行コンポーネントをロックする。
【０１０７】
本実施形態では、関連するコードブロックが受信されたことに応答して、汎用実行コンポーネントは、受信されたコードブロックと関連する専用実行コンポーネントをロックすることができる。一例として、以下のコード「ｌｏｃｋ（ｄｍａ）；ｌｏａｄＤａｔａＴｏＬ２（）；」を含むコードブロックを汎用実行コンポーネントが受信する場合、「ｄｍａ」という名前の専用実行コンポーネントをロックすることができる。
【０１０８】
そして、汎用実行コンポーネントが待機状態に入り、ローカル制御メモリにおける所定ローカル変数の更新通知を待つ。
【０１０９】
ステップ４０４において、ローカル制御メモリは、所定ローカル変数の値を更新する。
【０１１０】
本実施形態では、ローカル制御メモリは、他の汎用実行コンポーネントから送信されたローカル変数更新請求を受信された後、所定ローカル変数の値を目標値に更新することができる。ここで、ローカル変数更新請求には所定ローカル変数の目標値が含まれる。ここで、ローカル変数の値は、０または１のような２進値とすることができる。ローカル変数の値は他の予め設定された値であってもよく、本願では特に限定されない。
【０１１１】
ステップ４０５において、ローカル制御メモリは汎用実行コンポーネントへ通知を送信する。
【０１１２】
本実施形態では、ローカル制御メモリは、各汎用実行コンポーネントに向かって、前記所定ローカル変数の更新通知を送信することができる。
【０１１３】
ステップ４０６において、汎用実行コンポーネントは、コードブロックにおける命令を専用実行コンポーネントに送信する。
【０１１４】
本実施形態では、所定ローカル変数の更新を示す通知を受信されたことに応答して、汎用実行コンポーネントは、受信されたコードブロックにおける計算集約型タスクを処理するための命令を、ロックされた専用実行コンポーネントに送信することができる。
【０１１５】
ステップ４０７において、専用実行コンポーネントは、受信された命令を実行する。
【０１１６】
本実施形態では、汎用実行コンポーネントによって送信された命令を受信されたことに応答して、専用実行コンポーネントは、受信された命令を実行することができる。
【０１１７】
ステップ４０８において、専用実行コンポーネントは、実行結果をデータメモリに送信する。
【０１１８】
本実施形態では、専用実行コンポーネントは、命令実行が完了した後、実行結果をデータメモリに送信する。ここで、データメモリは、１次キャッシュ、２次キャッシュ、３次キャッシュ等を含むことができる。
【０１１９】
ステップ４０９において、データメモリは実行結果を記憶する。
【０１２０】
本実施形態では、データメモリは、専用実行コンポーネントの実行結果を受信し、受信された実行結果を記憶することができる。
【０１２１】
図４の動作タイミングから分かるように、ローカル制御メモリを設定することによって任意の２つの汎用実行コンポーネント間の同期が実現され、これによってカーネルコードの各コードブロックが確実に所望の順序で実行されるとともに、人工知能チップの制御が一層柔軟になる。
【０１２２】
図４には、汎用実行コンポーネントが専用実行コンポーネントをロックした後に待機状態に入り、ローカル制御メモリから汎用実行コンポーネントに通知が送信されることが図示されているが、本実施形態はこれに限定されない。
【０１２３】
本実施形態の一部好ましい実施形態では、汎用実行コンポーネントはさらに、目標ローカル変数の値が更新されているか否かをポーリング方式で検出し、前記目標ローカル変数の値の更新が検出されたことに応答して、受信されたコードブロック中の命令を継続して実行するように構成されてもよい。
【０１２４】
本実施形態の一部好ましい実施形態では、人工知能チップはさらに、少なくとも一つの計算クラスタを備えることができ、各々の計算クラスタは、データメモリ、少なくとも一つの汎用実行コンポーネント及び少なくとも一つの専用実行コンポーネントを含むことができる。各計算クラスタは一つの命令メモリを共有することができる。
【０１２５】
好ましくは、各計算クラスタは命令メモリを含むこともできる。各計算クラスタ内の命令メモリは、中央処理ユニットに通信可能に接続することができる。
【０１２６】
好ましくは、人工知能チップは、グローバル制御メモリをさらに含むことができ、各計算クラスタは、ローカル制御メモリをさらに含むことができる。グローバル制御メモリは少なくとも１つのグローバル変数の値を記憶し、ローカル制御メモリは少なくとも一つのローカル変数の値を記憶することができる。グローバル制御メモリは、計算クラスタから送信された、所定グローバル変数の目標値を含むグローバル変数更新請求を受信し、所定グローバル変数の値を目標値に更新するように構成されてもよい。
【０１２７】
好ましくは、グローバル制御メモリはさらに、少なくとも一つのローカル制御メモリに所定グローバル変数の更新通知を送信するように構成されてもよく、所定グローバル変数の更新を待機するローカル制御メモリはさらに、通知が受信されたことに応答して、所定グローバル変数と関連するローカル変数の値を更新するように構成されてもよい。
【０１２８】
好ましくは、ローカル制御メモリはさらに、目標グローバル変数の値が更新されているか否かをポーリング方式で検出し、目標グローバル変数の値の更新が検出されたことに応答して、所定グローバル変数と関連するローカル変数の値を更新する（及び各汎用実行コンポーネントに向かって関連するローカル変数の更新を示す通知を送信する）ように構成される。
【０１２９】
複数の計算クラスタを設置することにより、人工知能チップは、例えば、複数の簡単なモデルを含む複雑なニューラルネットワークモデルを処理することができる。グローバル制御メモリを設定することによって異なる計算クラスタ間の同期が実現され、これによって人工知能チップは複数の簡単なモデルを処理するときに確実に所望の順序で実行することができ、人工知能チップの制御がより一層柔軟になる。
【０１３０】
図４から分かるように、図２の対応する実施形態に比して、本実施形態における人工知能チップはローカル制御メモリをさらに含む。以上により、本実施形態に説明された解決対策は、異なる汎用実行コンポーネント間の同期が実現され、これによってカーネルコードの各コードブロックが確実に所望の順序で実行されるとともに、人工知能チップの制御が一層柔軟になる。
【０１３１】
さらに図５を参照し、図５は、本願による人工知能チップに用いられる命令実行方法の一実施形態のプロセス５００を示す。当該人工知能チップに用いられる命令実行方法は、次のステップを含むことができる。
【０１３２】
ステップ５０１において、命令メモリからのコードブロックを受信する。
【０１３３】
本実施形態では、人工知能チップは、命令メモリ、データメモリ、少なくとも一つの汎用実行コンポーネント及び少なくとも一つの専用実行コンポーネントを備える。命令メモリは、中央処理ユニットに通信可能に接続される。人工知能チップに用いられる命令実行方法の実行主体（例えば、図１の人工知能チップ１２の汎用実行コンポーネント）は、命令メモリからのコードブロックを受信することができる。ここで、コードブロックは、命令メモリによってホストコンピュータのＣＰＵから送信されたカーネルコードから取得されたものであり、専用実行コンポーネントと関連する。
【０１３４】
本実施形態のいくつかの好ましい実施形態において、カーネルコードは、ＣＰＵが入力されたデータストリーム図を解析することで取得することができ、例えば、所定のプログラミングプロトコルに応じてデータストリーム図を特定のプログラミング言語（例えば、Ｃ、Ｃ＋＋、Ｊａｖａ（登録商標）等）のカーネルコードに変換する。ここで、データストリーム図は、ユーザにより入力されたニューラルネットワークモデルの静的マップをマッピングすることにより取得することができる。
【０１３５】
本実施形態のいくつかの好ましい実施形態では、コードブロックは、第１命令および第２命令セットを含むことができる。ここで、第１命令は、汎用実行コンポーネントにより実行されるときに、コードブロックと関連する専用実行コンポーネントをロックするために使用される。第２命令セット内の各第２命令は、専用実行コンポーネントにより実行されるときに、計算集約型の計算タスクを処理するために使用される。第２命令セット内の第２の命令は、第１命令を実行した後（すなわち、専用実行コンポーネントをロックした後）に、汎用実行コンポーネントにより専用実行コンポーネントに送信される。
【０１３６】
一例として、次のコード「ｌｏｃｋ（ｄｍａ）；ｌｏａｄＤａｔａＴｏＬ２（）；」を含むコードブロックの場合、「ｌｏｃｋ（ｄｍａ）」が当該コードブロックの第１命令であり、「ｌｏａｄＤａｔａＴｏＬ２（）」が当該コードブロックの第２命令である。ここで、第１命令は「ｄｍａ」という名前の専用実行コンポーネントをロックするために使用され、第２命令はデータを２次キャッシュにロードするために使用される。
【０１３７】
本実施形態のいくつかの好ましい実施形態において、コードブロックは循環セグメントをさらに含むことができる。ここで、循環セグメントは第２命令セットを含むことができる。すなわち、第２命令セット内の各第２の命令は、第１命令が実行された後に循環して実行される。
【０１３８】
一例として、次のコード「ｌｏｃｋ（ｍａｃ）；ｗｈｉｌｅ（）｛ｃｏｎｖｏｌｕｔｉｏｎ（）；｝」を含むコードブロックの場合、「ｌｏｃｋ（ｍａｃ）」が当該コードブロックの第１命令であり、「ｗｈｉｌｅ（１）｛ｃｏｎｖｏｌｕｔｉｏｎ（）；｝」が当該コードブロックの循環セグメントであり、「ｃｏｎｖｏｌｕｔｉｏｎ（）」が循環セグメントにおける第２命令である。ここで、第１命令は「ｍａｃ」という名前の専用実行コンポーネントをロックするために使用され、第２命令は畳み込み演算を実行するために使用され、循環セグメントは第２命令を循環的に実行するために使用される（すなわち、畳み込み演算を循環して実行する）。
【０１３９】
ステップ５０２において、コードブロックと関連する専用実行コンポーネントをロックする。
【０１４０】
本実施形態では、前記実行主体は、コードブロックと関連する専用実行コンポーネントをロックすることができる。一例として、汎用実行コンポーネントがコード「ｌｏｃｋ（ｄｍａ）；ｌｏａｄＤａｔａＴｏＬ２（）；」を含むコードブロックを受信する場合、第１命令「ｌｏｃｋ（ｄｍａ）」を実行することで、「ｄｍａ」という名前の専用実行コンポーネントをロックすることができる。
【０１４１】
汎用実行コンポーネントは一つの専用実行コンポーネントをロックすることも、複数の専用実行コンポーネントをロックすることもできることに留意されたい。
【０１４２】
ステップ５０３において、コードブロックにおける命令を、ロックされた専用実行コンポーネントに送信する。
【０１４３】
本実施形態では、コードブロックと関連する専用実行コンポーネントをロックした後、前記実行主体は、受信されたコードブロックにおける、計算集約型タスクを処理するための命令を、ロックされた専用実行コンポーネントに送信することができる。ここで、専用実行コンポーネントは、受信された命令を実行するとともに、実行結果をデータメモリに記憶するように構成される。
【０１４４】
一例として、一つの専用実行コンポーネントがロックされると、前記実行主体は、コードブロックの第２命令セットにおける第２命令を、実行順番でロックされた専用実行コンポーネントに順次送信することができる。
【０１４５】
別の一例として、一つ以上の専用実行コンポーネントがロックされると、コードブロック中の第２命令セットにおける各々の第２命令に対して、前記実行主体は、まず、ロックされた専用実行コンポーネントから当該第２命令を実行する専用実行コンポーネントを確定し、その後、確定された専用実行コンポーネントに当該第２命令を送信することができる。
【０１４６】
本実施形態の一部好ましい実施形態では、人工知能チップは、少なくとも一つのローカル変数の値が記憶されたローカル制御メモリをさらに備えることができる。ここで、ローカル制御メモリは、汎用実行コンポーネントから送信された、所定ローカル変数の目標値を含むローカル変数更新請求を受信し、所定ローカル変数の値を目標値に更新するように構成されてもよい。
【０１４７】
好ましくは、人工知能チップに用いられる命令実行方法は、目標ローカル変数の更新通知を受信されたことに応答して、コードブロック中の命令を継続して実行することをさらに含む。
【０１４８】
一例として、コードブロック内の命令は、実行時に他の汎用実行コンポーネントの実行結果を必要とする。この場合、上記実行主体は、専用実行コンポーネントをロックした後に待機状態になることができる。他の汎用実行コンポーネントは、動作実行が完了した後、ローカル制御メモリにローカル変数Ａの更新請求を送信する。ローカル制御メモリはローカル変数Ａを更新した後、ローカル変数Ａが更新された通知を前記実行主体に送信する。前記実行主体は、当該通知を受信された後、コードブロック中の命令を継続して実行する。
【０１４９】
好ましくは、当該人工知能チップに用いられる命令実行方法は、目標ローカル変数の値が更新されたか否かをポーリング方式で検出し、目標ローカル変数の値更新を検出したことに応答して、コードブロック中の命令を継続して実行することをさらに含む。
【０１５０】
本実施形態の一部好ましい実施形態では、人工知能チップは、少なくとも一つの計算クラスタをさら備えることができ、各々の計算クラスタは、データメモリ、少なくとも一つの汎用実行コンポーネント及び少なくとも一つの専用実行コンポーネントを含むことができる。各計算クラスタは、一つの命令メモリを共有することができる。
【０１５１】
好ましくは、各計算クラスタが命令メモリを含むこともできる。各計算クラスタ内の命令メモリは、中央処理ユニットに通信可能に接続することができる。
【０１５２】
好ましくは、人工知能チップは、グローバル制御メモリをさらに含むことができ、各計算クラスタは、ローカル制御メモリをさらに含むことができる。グローバル制御メモリは少なくとも１つのグローバル変数の値を記憶することができ、ローカル制御メモリは少なくとも一つのローカル変数の値を記憶することができる。グローバル制御メモリは、計算クラスタから送信された、所定グローバル変数の目標値を含むグローバル変数更新請求を受信し、所定グローバル変数の値を目標値に更新するように構成されてもよい。
【０１５３】
好ましくは、グローバル制御メモリはさらに、少なくとも一つのローカル制御メモリに所定グローバル変数の更新通知を送信するように構成されてもよい。所定グローバル変数更新を待機するローカル制御メモリはさらに、通知が受信されたことに応答して、所定グローバル変数と関連するローカル変数の値を更新するように構成されてもよい。
【０１５４】
好ましくは、ローカル制御メモリはさらに、目標グローバル変数の値が更新されているか否かをポーリング方式で検出し、目標グローバル変数の値の更新が検出されたことに応答して、所定グローバル変数と関連するローカル変数の値を更新する（及び各汎用実行コンポーネントに向かって関連するローカル変数の更新を示す通知を送信する）ように構成されてもよい。
【０１５５】
複数の計算クラスタを設置することにより、人工知能チップは、例えば、複数の簡単なモデルを含む複雑なニューラルネットワークモデルを処理することができる。グローバル制御メモリを設置することによって異なる計算クラスタ間の同期が実現され、これによって人工知能チップは複数の簡単なモデルを処理するときに確実に所望の順序で実行することができ、人工知能チップの制御がより一層柔軟になる。
【０１５６】
本願の上記実施形態による、人工知能チップに用いられる命令実行方法は、命令メモリからのコードブロックを受信された後、コードブロックと関連する専用実行コンポーネントをロックし、最後に、コードブロックにおける命令を、ロックされた専用実行コンポーネントに送信することにより、カーネルコード実行の間、ＣＰＵとの頻繁な通信が回避されるとともに、専用実行コンポーネントが頻繁にロック／ロック解除されることが回避され、人工知能チップの性能を向上させることができる。
【０１５７】
さらに図６を参照すると、図５に示される方法の実施として、本願は、人工知能チップに用いられる命令実行装置の一実施形態を提供し、当該装置の実施形態は、図５に示される方法の実施形態に対応し、当該装置は、人工知能チップの汎用実行コンポーネントに特に適用することができる。
【０１５８】
図６に示されるように、本実施形態の人工知能チップに用いられる命令実行装置６００は、コード受信ユニット６０１、ロックユニット６０２及び命令送信ユニット６０３を備えることができる。ここで、コード受信ユニット６０１は、命令メモリからのコードブロックを受信するように構成され、コードブロックは、中央処理ユニットから送信されたカーネルコードから命令メモリにより取得されたものであり、専用実行コンポーネントと関連する。ロックユニット６０２は、コードブロックと関連する専用実行コンポーネントをロックするように構成され、命令送信ユニット６０３は、コードブロック中の命令を、ロックされた専用実行コンポーネントに送信するように構成され、専用実行コンポーネントは、受信された命令を実行するとともに実行結果をデータメモリに記憶するように構成される。
【０１５９】
本実施形態では、人工知能チップは、命令メモリ、データメモリ、少なくとも一つの汎用実行コンポーネント及び少なくとも一つの専用実行コンポーネントを備えることができる。命令メモリは、中央処理ユニットに通信可能に接続される。人工知能チップに用いられる命令実行装置６００の前記コード受信ユニット６０１は、命令メモリからのコードブロックを受信することができる。ここで、コードブロックは、ホストコンピュータのＣＰＵから送信されたカーネルコードから命令メモリにより取得されたものであり、専用実行コンポーネントと関連する。
【０１６０】
本実施形態のいくつかの好ましい実施形態において、カーネルコードは、ＣＰＵが入力されたデータストリーム図を解析することで取得することができ、例えば、所定のプログラミングプロトコルに応じてデータストリーム図を特定のプログラミング言語（例えば、Ｃ、Ｃ＋＋、Ｊａｖａ（登録商標）等）のカーネルコードに変換する。ここで、データストリーム図は、ユーザにより入力されたニューラルネットワークモデルの静的マップをマッピングすることにより取得することができる。
【０１６１】
本実施形態では、前記ロックユニット６０２は、コードブロックと関連する専用実行コンポーネントをロックすることができる。一例として、汎用実行コンポーネントがコード「ｌｏｃｋ（ｄｍａ）；ｌｏａｄＤａｔａＴｏＬ２（）；」を含むコードブロックを受信する場合、第１命令「ｌｏｃｋ（ｄｍａ）」を実行することで、「ｄｍａ」という名前の専用実行コンポーネントをロックすることができる。
【０１６２】
本実施形態のいくつかの好ましい実施形態では、コードブロックは、第１命令および第２命令セットを含むことができる。ロックユニット６０２は、具体的に、第１命令を実行し、コードブロックと関連する専用実行コンポーネントをロックするように構成されてもよい。
【０１６３】
本実施形態では、コードブロックと関連する専用実行コンポーネントをロックした後、前記命令送信ユニット６０３は、受信されたコードブロックにおける、計算集約型タスクを処理するための命令を、ロックされた専用実行コンポーネントに送信することができる。ここで、専用実行コンポーネントは、受信された命令を実行するとともに、実行結果をデータメモリに記憶するように構成される。
【０１６４】
本実施形態のいくつかの好ましい実施形態では、命令送信ユニット６０３は、具体的に、第２命令セット中の第２命令を、ロックされた専用実行コンポーネントに順次送信するように構成されてもよい。
【０１６５】
本実施形態のいくつかの好ましい実施形態では、命令送信ユニット６０３は、具体的に、第２命令セットにおける第２命令に対して、ロックされた専用実行コンポーネントから当該第２命令を実行する専用実行コンポーネントを確定し、確定された専用実行コンポーネントに当該第２命令を送信するように構成されてもよい。
【０１６６】
本実施形態の一部好ましい実施形態では、人工知能チップは、少なくとも一つのローカル変数の値が記憶されたローカル制御メモリをさらに備えることができる。ローカル制御メモリは、汎用実行コンポーネントから送信された、所定ローカル変数の目標値を含むローカル変数更新請求を受信し、所定ローカル変数の値を目標値に更新するように構成されてもよい。
【０１６７】
本実施形態の一部好ましい実施形態では、人工知能チップは、少なくとも一つのローカル変数の値が記憶されたローカル制御メモリをさらに備えることができる。当該装置６００は、継続実行ユニットをさらに備えることができる。ここで、継続実行ユニットは、目標ローカル変数の更新通知を受信された応答して、コードブロック中の命令を継続して実行するように構成されてもよい。
【０１６８】
本実施形態の一部好ましい実施形態では、人工知能チップは、少なくとも一つのローカル変数の値が記憶されたローカル制御メモリをさらに備えることができる。当該装置６００は、検出ユニット及び継続実行ユニットをさらに備えることができる。ここで、検出ユニットは、目標ローカル変数の値が更新されているか否かをポーリング方式で検出するように構成されてもよく、継続実行ユニットは、目標ローカル変数の値の更新が検出されたことに応答して、コードブロック中の命令を継続して実行するように構成されてもよい。
【０１６９】
本実施形態の一部好ましい実施形態では、人工知能チップは、少なくとも一つの計算クラスタをさらに備えることができる。各々の計算クラスタは、データメモリ、少なくとも一つの汎用実行コンポーネント及び少なくとも一つの専用実行コンポーネントを備えることができる。
【０１７０】
本実施形態の一部好ましい実施形態では、人工知能チップは、グローバル制御メモリをさらに含み、各計算クラスタは、ローカル制御メモリをさらに備えることができる。ここで、グローバル制御メモリには少なくとも１つのグローバル変数の値が記憶され、ローカル制御メモリには少なくとも一つのローカル変数の値が記憶される。グローバル制御メモリは、計算クラスタから送信された、所定グローバル変数の目標値を含むグローバル変数更新請求を受信し、所定グローバル変数の値を目標値に更新するように構成されてもよい。
【０１７１】
本実施形態の一部好ましい実施形態では、グローバル制御メモリはさらに、少なくとも一つのローカル制御メモリに所定グローバル変数の更新通知を送信するように構成されてもよい。所定グローバル変数更新を待機するローカル制御メモリはさらに、通知が受信されたことに応答して、所定グローバル変数と関連するローカル変数の値を更新するように構成されてもよい。
【０１７２】
本実施形態の一部好ましい実施形態では、ローカル制御メモリはさらに、目標グローバル変数の値が更新されているか否かをポーリング方式で検出し、目標グローバル変数の値の更新が検出されたことに応答して、所定グローバル変数と関連するローカル変数の値を更新するように構成されてもよい。
【０１７３】
本実施形態の一部好ましい実施形態では、カーネルコードが実行される間、汎用実行コンポーネントにロックされた専用実行コンポーネントはロック解除されない。
【０１７４】
本実施形態のいくつかの好ましい実施形態において、当該装置６００は循環ユニットをさらに備えることができる。ここで、循環ユニットは、第１命令を実行した後、第２命令セットを循環して実行するように構成されてもよい。
【０１７５】
本願の上記実施形態による、人工知能チップに用いられる命令実行装置は、命令メモリからのコードブロックを受信された後、コードブロックと関連する専用実行コンポーネントをロックし、最後に、コードブロックにおける命令を、ロックされた専用実行コンポーネントに送信する。これにより、カーネルコード実行の間、ＣＰＵとの頻繁な通信が回避されるとともに、専用実行コンポーネントが頻繁にロック／ロック解除されることが回避され、人工知能チップの性能を向上させることができる。
【０１７６】
本願実施形態はさらに電子デバイスを提供する。該電子デバイスの構造は図７を参照することができ、図７は、本願の電子デバイスの一実施形態のコンピュータシステム７００の構造模式図を示す。図７に示された電子デバイスは一つの例示に過ぎず、本願の実施形態の機能及び使用範囲に対して制限するものではない。
【０１７７】
図７に示されるように、コンピュータシステム７００は、一つ又は複数の中央処理ユニット（ＣＰＵ）７０１及び一つ又は複数の人工知能チップ７０４を備える。ＣＰＵ７０１は、読み出し専用メモリ（ＲＯＭ）７０２に記憶されているプログラム又は記憶部７０７からランダムアクセスメモリ（ＲＡＭ）７０３にロードされたプログラムに基づいて様々な適当な動作および処理を実行することができる。人工知能チップ７０４は、命令メモリ、データメモリ、一つ又は複数の汎用実行コンポーネント及び一つ又は複数の専用実行コンポーネントを備えることができ、人工知能チップ７０４は、ＣＰＵ７０１から受信されたプログラムに基づいて様々な適当な動作および処理を実行することができる。ＲＡＭ７０３には、システム７００の操作に必要な様々なプログラムおよびデータがさらに記憶されている。ＣＰＵ７０１、ＲＯＭ７０２およびＲＡＭ７０３及び人工知能チップ７０４は、バス７０５を介して互いに接続されている。入力／出力（Ｉ／Ｏ）インターフェース７０６もバス７０５に接続されている。
【０１７８】
ハードディスクなどを含む記憶部７０７、およびＬＡＮカード、モデムなどを含むネットワークインターフェースカードの通信部７０８は、Ｉ／Ｏインターフェース７０６に接続されている。通信部７０８は、例えばインターネットのようなネットワークを介して通信処理を実行する。ドライバ７０９は、必要に応じてＩ／Ｏインターフェース７０６に接続される。リムーバブルメディア７１０は、例えば、マグネチックディスク、光ディスク、光磁気ディスク、半導体メモリなどのようなものであり、必要に応じてドライバ７０９に取り付けられ、したがって、ドライバ７０９から読み出されたコンピュータプログラムが必要に応じて記憶部７０７にインストールされる。
【０１７９】
特に、本発明の実施形態によれば、上記のフローチャートに参照して説明された過程はコンピュータソフトウェアプログラムに実現されてもよい。例えば、本発明の実施形態は、コンピュータ読取可能な媒体にロードされるコンピュータプログラムを含むコンピュータプログラム製品を備え、当該コンピュータプログラムは、フローチャートに示される方法を実行するためのプログラムコードを含む。このような実施形態において、当該コンピュータプログラムは、通信部７０８を介してネットワークからダウンロードしてインストールされ、及び／又はリムーバブルメディア７１０からインストールされてもよい。該コンピュータプログラムは、人工知能チップ７０４の汎用実行コンポーネントにより実行される場合に、本願の方法に限定される前記機能を実行する。
【０１８０】
説明すべきなのは、本願に記載のコンピュータ読取可能な媒体は、コンピュータ読取可能な信号媒体又はコンピュータ読取可能な記憶媒体又は前記両者の任意の組み合わせであってもよい。コンピュータ読取可能な記憶媒体は、例えば、電気、磁気、光、電磁気、赤外線、或いは半導体のシステム、装置又はデバイス、或いはこれらの任意の組み合わせであってもよいが、それらに限定されない。コンピュータ読取可能な記憶媒体についてのより具体的な例は、一つ又は複数の導線を含む電気的な接続、携帯可能なコンピュータ磁気ディスク、ハードディスク、ランダムアクセスメモリ（ＲＡＭ）、読取専用メモリ（ＲＯＭ）、消去可能なプログラミング読取専用メモリ（ＥＰＲＯＭ又はフラッシュ）、光ファイバ、携帯可能なコンパクト磁気ディスク読取専用メモリ（ＣＤ−ＲＯＭ）、光学記憶素子、磁気記憶素子、或いは前記任意の適当の組み合わせを含むが、それらに限定されない。本願において、コンピュータ読取可能な記憶媒体は、プログラムを含むか記憶する任意の有形の媒体であっても良く、当該プログラムは、コマンドによりシステム、装置又はデバイスの使用を実行し、或いはそれらに組み合わせて使用されてもよい。本願において、コンピュータ読取可能な信号媒体は、ベースバンドに伝送され或いはキャリアの一部として伝送され、コンピュータ読取可能なプログラムコードがロードされるデータ信号を含んでもよい。このような伝送されるデータ信号は、各種類の形式を採用しても良く、電磁気信号、光信号又は前記任意の適当の組み合わせを含むが、それらに限定されない。コンピュータ読取可能な信号媒体は、コンピュータ読取可能な記憶媒体以外の任意のコンピュータ読取可能な媒体であっても良く、当該コンピュータ読取可能な媒体は、コマンドによりシステム、装置又はデバイスの使用を実行し又はそれらと組み合わせて使用されるプログラムを送信し、伝播し又は伝送することができる。コンピュータ読取可能な媒体に含まれるプログラムコードは、任意の適当の媒体で伝送されても良く、無線、電線、光ケーブル、ＲＦなど、或いは前記任意の適当の組み合わせを含むが、それらに限定されない。
【０１８１】
一つ又は複数種類のプログラミング言語又はそれらの組合わせで、本願の操作を実行するためのコンピュータプログラムコードを編集することができ、前記プログラミング言語には、オブジェクト向けのプログラミング言語、例えばＪａｖａ（登録商標）、Ｓｍａｌｌｔａｌｋ、Ｃ＋＋が含まれ、通常のプロシージャ向けプログラミング言語、例えば「Ｃ」言語又は類似しているプログラミング言語も含まれる。プログラムコードは、完全にユーザコンピュータにて実行されてもよく、部分的にユーザコンピュータにおいて実行されてもよく、１つの独立のソフトウェアパッケージとして実行されてもよく、部分的にユーザコンピュータにおいて実行され且つ部分的に遠隔コンピュータにおいて実行されてもよく、又は完全に遠隔コンピュータ又はサーバにおいて実行されてもよい。遠隔コンピュータに係る場合に、遠隔コンピュータは、ローカルエリアネットワーク（ＬＡＮ）又は広域ネットワーク（ＷＡＮ）を含む任意の種類のネットワークを介して、ユーザコンピュータ、又は、外部コンピュータに接続できる（例えば、インターネットサービス事業者を利用してインターネットを介して接続できる）。
【０１８２】
図面におけるフローチャート及びブロック図は、本願の各実施形態によるシステム、方法及びコンピュータプログラム製品により実現可能なシステム構造、機能及び操作を示した。この点において、フローチャート又はブロック図における各ブロックは、一つのモジュール、プログラムセグメント、又はコードの一部を表すことができ、当該モジュール、プログラムセグメント、又はコードの一部には、一つ又は複数の所定のロジック機能を実現するための実行可能なコマンドが含まれる。注意すべきなのは、幾つかの置換としての実現において、ブロックに示される機能は図面に示される順序と異なって発生されてもよい。例えば、二つの接続的に表示されるブロックは実際に基本的に併行に実行されてもよく、場合によっては逆な順序で実行されてもよく、関連の機能に従って決定される。注意すべきなのは、ブロック図及び／又はフローチャートにおける各ブロック、及びブロック図及び／又はフローチャートにおけるブロックの組み合わせは、所定の機能又は操作を実行する専用のハードウェアによるシステムで実現されてもよく、或いは専用のハードウェアとコンピュータコードの組み合わせで実現されてもよい。
【０１８３】
本願の実施形態に説明されたユニットは、ソフトウェアの手段で実現されてもよく、ハードウェアの手段で実現されてもよい。説明されたユニットは、汎用実行コンポーネントに設置されてもよい。例えば、コード受信ユニット、ロックユニット及び命令送信ユニットを含む汎用実行コンポーネントとして記載されても良い。これらのユニットの名称は場合によってユニットの自身に対する限定とされない。例えば、コード受信ユニットは、「命令メモリからのコードブロックを受信するユニット」と記載されてもよい。
【０１８４】
他の態様として、本願は更にコンピュータ読取可能な媒体を提供した。該コンピュータ読取可能な媒体は、前記実施形態に説明された人工知能チップにおける汎用実行コンポーネントに含まれたものであっても良く、当該汎用実行コンポーネントに実装されずに別途に存在するものであってもよい。前記コンピュータ読取可能な媒体には、一つ又は複数のプログラムがロードされる。前記一つ又は複数のプログラムが当該汎用実行コンポーネントにより実行されると、当該汎用実行コンポーネントは以下のように実行する、つまり、命令メモリからのコードブロックを受信し、コードブロックは、命令メモリが、中央処理ユニットから送信されたカーネルコードから取得されたもので、専用実行コンポーネントと関連し、コードブロックと関連する専用実行コンポーネントをロックし、コードブロック中の命令を、ロックされた専用実行コンポーネントに送信し、専用実行コンポーネントは、受信された命令を実行するとともに実行結果をデータメモリに記憶するように構成される。
【０１８５】
以上の記載は、ただ本願の好適な実施形態及び運用される技術原理に対する説明である。当業者であればわかるように、本願にかかる発明範囲は、前記技術的特徴の特定の組み合わせからなる技術的手段に限定されず、前記発明構想から逸脱されない場合に前記技術特徴又は均等の特徴による任意の組み合わせで形成される他の技術的手段も同時に含まれるべきである。例えば、前記特徴と本願に開示された（それらに限定されない）類似の機能を具備する技術的特徴が互いに置換されて得られる技術的手段は該当する。
【図１】
2020027613.tif 000004
【図２】
2020027613.tif 000005
【図３】
2020027613.tif 000006
【図４】
2020027613.tif 000007
【図５】
2020027613.tif 000008
【図６】
2020027613.tif 000009
【図７】
2020027613.tif 000010
【手続補正書】
【提出日】令和1年7月5日(2019.7.5)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
命令メモリ、データメモリ、少なくとも一つの汎用実行コンポーネント及び少なくとも一つの専用実行コンポーネントを備える人工知能チップであって、
命令メモリは、中央処理ユニットから送信されたカーネルコードを受信するように構成され、前記カーネルコードは少なくとも一つのコードブロックを含み、前記少なくとも一つのコードブロックにおけるコードブロックは汎用実行コンポーネント及び専用実行コンポーネントと関連し、
汎用実行コンポーネントは、コードブロックを受信し、受信されたコードブロックに関連する専用実行コンポーネントをロックするとともに、受信されたコードブロックにおける命令を、ロックされた専用実行コンポーネントに送信するように構成され、
専用実行コンポーネントは、汎用実行コンポーネントから送信された命令を受信し、受信された命令を実行するとともに、実行結果をデータメモリに記憶するように構成され、
データメモリは、専用実行コンポーネントから送信された実行結果を記憶するように構成される、
人工知能チップ。
【請求項２】
前記少なくとも一つのコードブロックにおけるコードブロックは、第１命令及び第２命令セットを含み、
汎用実行コンポーネントは具体的に、
コードブロックが受信されたことに応答して、第１命令を実行することで、受信されたコードブロックに関連する専用実行コンポーネントをロックし、
第２命令セットにおける第２命令を、ロックされた専用実行コンポーネントに順次送信するように構成される請求項１に記載の人工知能チップ。
【請求項３】
前記少なくとも一つのコードブロックにおけるコードブロックは、第１命令及び第２命令セットを含み、
汎用実行コンポーネントは具体的に、
コードブロックが受信されたことに応答して、第１命令を実行することで、受信されたコードブロックに関連する少なくとも一つの専用実行コンポーネントをロックし、
第２命令セットにおける第２命令に対して、ロックされた専用実行コンポーネントから、当該第２命令を実行するための専用実行コンポーネントを確定し、確定された専用実行コンポーネントに当該第２命令を送信するように構成される請求項１に記載の人工知能チップ。
【請求項４】
前記人工知能チップは、少なくとも一つのローカル変数の値が記憶されたローカル制御メモリをさらに備え、
ローカル制御メモリは、
汎用実行コンポーネントから送信された、所定ローカル変数の目標値を含むローカル変数更新請求を受信し、
前記所定ローカル変数の値を前記目標値に更新するように構成される請求項１に記載の人工知能チップ。
【請求項５】
ローカル制御メモリはさらに、前記少なくとも一つの汎用実行コンポーネントに、前記所定ローカル変数の更新通知を送信するように構成され、
前記所定ローカル変数の更新を待機する汎用実行コンポーネントはさらに、前記通知が受信されたことに応答して、受信されたコードブロックにおける命令を継続して実行するように構成される請求項４に記載の人工知能チップ。
【請求項６】
汎用実行コンポーネントはさらに、
目標ローカル変数の値が更新されているか否かをポーリング方式で検出し、
前記目標ローカル変数の値の更新が検出されたことに応答して、受信されたコードブロックにおける命令を継続して実行するように構成される請求項４に記載の人工知能チップ。
【請求項７】
前記人工知能チップは、少なくとも一つの計算クラスタをさらに備え、前記少なくとも一つの計算クラスタにおける計算クラスタ、データメモリ、少なくとも一つの汎用実行コンポーネント及び少なくとも一つの専用実行コンポーネントを含む請求項１に記載の人工知能チップ。
【請求項８】
前記人工知能チップはグローバル制御メモリをさらに備え、計算クラスタはローカル制御メモリをさらに備え、前記グローバル制御メモリに少なくとも一つのグローバル変数の値が記憶され、ローカル制御メモリに少なくとも一つのローカル変数の値が記憶され、
前記グローバル制御メモリは、
計算クラスタから送信された、所定グローバル変数の目標値を含むグローバル変数更新請求を受信し、
前記所定グローバル変数の値を前記目標値に更新するように構成される請求項７に記載の人工知能チップ。
【請求項９】
前記グローバル制御メモリはさらに、少なくとも一つの前記ローカル制御メモリに前記所定グローバル変数の更新通知を送信するように構成され、
前記所定グローバル変数の更新を待機するローカル制御メモリはさらに、前記通知が受信されたことに応答して、前記所定グローバル変数に関連するローカル変数の値を更新するように構成される請求項８に記載の人工知能チップ。
【請求項１０】
ローカル制御メモリはさらに、
目標グローバル変数の値が更新されているか否かをポーリング方式で検出し、
前記目標グローバル変数の値の更新が検出されたことに応答して、前記所定グローバル変数に関連するローカル変数の値を更新するように構成される請求項８に記載の人工知能チップ。
【請求項１１】
前記カーネルコードが実行される間は、汎用実行コンポーネントによりロックされた専用実行コンポーネントはロック解除されない請求項１に記載の人工知能チップ。
【請求項１２】
汎用実行コンポーネントはさらに、第１命令を実行した後、第２命令セットを循環実行するように構成される請求項２又は３に記載の人工知能チップ。
【請求項１３】
前記カーネルコードは、入力されたデータフロー図を前記中央処理ユニットにより解析して得られたものであり、前記データフロー図は、ニューラルネットワークモデルに対する静的マップによってマッピングして得られたものである請求項１に記載の人工知能チップ。
【請求項１４】
人工知能チップに用いられる命令実行方法であって、前記人工知能チップは、命令メモリ、データメモリ、少なくとも一つの汎用実行コンポーネント及び少なくとも一つの専用実行コンポーネントを備え、命令メモリは中央処理ユニットに通信可能に接続され、
前記方法は、
前記命令メモリからのコードブロックを受信するステップであって、前記コードブロックは、前記中央処理ユニットから送信されたカーネルコードの中から前記命令メモリにより取得されたものであり、前記コードブロックは専用実行コンポーネントと関連する、ステップと、
前記コードブロックに関連する専用実行コンポーネントをロックするステップと、
前記コードブロックの中の命令を、ロックされた専用実行コンポーネントに送信するステップであって、専用実行コンポーネントは、受信された命令を実行するとともに、実行結果を前記データメモリに記憶するように構成されている、ステップとを含む人工知能チップに用いられる命令実行方法。
【請求項１５】
前記人工知能チップは、少なくとも一つのローカル変数の値が記憶されたローカル制御メモリをさらに備え、
前記方法は、
目標ローカル変数の更新通知が受信されたことに応答して、前記コードブロック中の命令を継続して実行することをさらに含む請求項１４に記載の方法。
【請求項１６】
前記人工知能チップは、少なくとも一つのローカル変数の値が記憶されたローカル制御メモリをさらに備え、
前記方法は、
目標ローカル変数の値が更新されているか否かをポーリング方式で検出することと、
前記目標ローカル変数の値の更新が検出されたことに応答して、前記コードブロック中の命令を継続して実行することとをさらに含む請求項１４に記載の方法。
【請求項１７】
人工知能チップに用いられる命令実行装置であって、前記人工知能チップは、命令メモリ、データメモリ、少なくとも一つの汎用実行コンポーネント及び少なくとも一つの専用実行コンポーネントを備え、命令メモリは中央処理ユニットに通信可能に接続され、
前記装置は、
前記命令メモリからのコードブロックを受信するように構成されたコード受信ユニットであって、前記コードブロックは、前記中央処理ユニットから送信されたカーネルコードの中から前記命令メモリにより取得されたものであり、前記コードブロックは専用実行コンポーネントと関連する、コード受信ユニットと、
前記コードブロックに関連する専用実行コンポーネントをロックするように構成されたロックユニットと、
前記コードブロック中の命令を、ロックされた専用実行コンポーネントに送信するように構成された命令送信ユニットであって、専用実行コンポーネントは、受信された命令を実行するとともに、実行結果を前記データメモリに記憶するように構成されている、命令送信ユニットとを含む、人工知能チップに用いられる命令実行装置。
【請求項１８】
コンピュータプログラムが記憶されたコンピュータ可読媒体であって、前記コンピュータプログラムが実行ユニットにより実行されるときに請求項１４〜１６のいずれか１項に記載の方法を実現する、コンピュータ可読媒体。
【請求項１９】
中央処理ユニット、記憶装置および少なくとも一つの請求項１〜１３のいずれか１項に記載の人工知能チップを備える電子機器。
【請求項２０】
コンピュータプログラムであって、
前記コンピュータプログラムがプロセッサにより実行されると、請求項１４ないし請求項１６のいずれか一項に記載の方法を実現させるコンピュータプログラム。
【外国語明細書】
2020027613000001.pdf