(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2023-12-14
(45)【発行日】2023-12-22
(54)【発明の名称】演算子の生成方法および装置、電子機器、記憶媒体並びにコンピュータプログラム
(51)【国際特許分類】
G06F 8/30 20180101AFI20231215BHJP
G06F 9/54 20060101ALI20231215BHJP
【FI】
G06F8/30
G06F9/54
【外国語出願】
(21)【出願番号】P 2022094040
(22)【出願日】2022-06-10
【審査請求日】2022-06-14
(31)【優先権主張番号】202111503431.6
(32)【優先日】2021-12-10
(33)【優先権主張国・地域又は機関】CN
(73)【特許権者】
【識別番号】514322098
【氏名又は名称】ベイジン バイドゥ ネットコム サイエンス テクノロジー カンパニー リミテッド
【氏名又は名称原語表記】Beijing Baidu Netcom Science Technology Co., Ltd.
【住所又は居所原語表記】2/F Baidu Campus, No.10, Shangdi 10th Street, Haidian District, Beijing 100085, China
(74)【代理人】
【識別番号】110000796
【氏名又は名称】弁理士法人三枝国際特許事務所
(72)【発明者】
【氏名】▲シン▼ 馮
(72)【発明者】
【氏名】藍 翔
(72)【発明者】
【氏名】牛 麗玲
(72)【発明者】
【氏名】劉 賢冬
(72)【発明者】
【氏名】馬 艶軍
(72)【発明者】
【氏名】于 佃海
(72)【発明者】
【氏名】王 海峰
【審査官】坂庭 剛史
(56)【参考文献】
【文献】特開2015-149038(JP,A)
【文献】中国特許出願公開第109447256(CN,A)
【文献】米国特許出願公開第2020/0334572(US,A1)
【文献】米国特許出願公開第2021/0081837(US,A1)
【文献】中国特許出願公開第111782181(CN,A)
【文献】米国特許出願公開第2016/0092181(US,A1)
【文献】李珍泌 ほか,"Batched Kernel APIを用いるOpenMPタスク生成",情報処理学会研究報告 ハイパフォーマンスコンピューティング(HPC) [online] ,情報処理学会,2019年07月,Vol. 2019-HPC-170,No. 26,[2019年07月22日検索],インターネット<URL:https://ipsj.ixsq.nii.ac.jp/ej/?action=repository_uri&item_id=198163&file_id=1&file_no=1>
(58)【調査した分野】(Int.Cl.,DB名)
G06F 8/30-8/54
G06F 9/46-9/54
G06F 15/80
G06N 3/02-3/10
(57)【特許請求の範囲】
【請求項1】
演算子の生成装置により実行される演算子の生成方法であって、
アクセス機能、ストレージ機能および演算機能のうちのいずれか1つの基本機能を提供するための1組のベースアプリケーションプログラミングインタフェースを構築するステップと、
演算子ロジックを実現するために前記ベースアプリケーションプログラミングインタフェースを呼び出すためのカーネルアプリケーションプログラミングインタフェースを構築するステップと、
前記1組のベースアプリケーションプログラミングインタフェースと前記カーネルアプリケーションプログラミングインタフェースとに基づいて、ターゲットカーネル演算子を生成するステップと、
を含む演算子の生成方法。
【請求項2】
前記1組のベースアプリケーションプログラミングインタフェースと前記カーネルアプリケーションプログラミングインタフェースとに基づいて、ターゲットカーネル演算子を生成するステップは、
前記1組のベースアプリケーションプログラミングインタフェースのうちの3種類のベースアプリケーションプログラミングインタフェースとカーネルアプリケーションプログラミングインタフェースとに基づいて、ターゲットカーネル演算子を生成するステップを含み、
前記3種類のベースアプリケーションプログラミングインタフェースは、それぞれ入出力アプリケーションプログラミングインタフェース、計算アプリケーションプログラミングインタフェースおよび計算ルールアプリケーションプログラミングインタフェースであり、
前記入出力アプリケーションプログラミングインタフェースは、グローバルメモリとレジスタとの間の読み書きを完了させるために用いられ、
前記計算アプリケーションプログラミングインタフェースは汎用計算関数であり、
前記計算ルールアプリケーションプログラミングインタフェースは、計算アプリケーションプログラミングインタフェースにおける計算ルールを定義するために用いられ、前記計算ルールは前記計算アプリケーションプログラミングインタフェースの呼び出しに供するものである、
請求項1に記載の演算子の生成方法。
【請求項3】
前記1組のベースアプリケーションプログラミングインタフェースと前記カーネルアプリケーションプログラミングインタフェースとに基づいて、ターゲットカーネル演算子を生成するステップは、
ベースアプリケーションプログラミングインタフェースに対する更新動作を検出したことに応答して、更新動作に基づいて更新後の1組のベースアプリケーションプログラミングインタフェースを生成するステップと、
前記更新後の1組のベースアプリケーションプログラミングインタフェースとカーネルアプリケーションプログラミングインタフェースとに基づいて、ターゲットカーネル演算子を生成するステップと、
を含む請求項1に記載の演算子の生成方法。
【請求項4】
1組のベースアプリケーションプログラミングインタフェースを構築するステップは、
生成されるターゲットカーネル演算子のハードウェアアーキテクチャの類別に基づいて、1組のベースアプリケーションプログラミングインタフェースを構築するステップを含む請求項1に記載の演算子の生成方法。
【請求項5】
前記計算ルールアプリケーションプログラミングインタフェースは、ユーザのニーズに応じて設定される請求項2に記載の演算子の生成方法。
【請求項6】
アクセス機能、ストレージ機能および演算機能のうちのいずれか1つの基本機能を提供するための1組のベースアプリケーションプログラミングインタフェースを構築するように構成される第1の構築モジュールと、
演算子ロジックを実現するために前記ベースアプリケーションプログラミングインタフェースを呼び出すためのカーネルアプリケーションプログラミングインタフェースを構築するように構成される第2の構築モジュールと、
前記1組のベースアプリケーションプログラミングインタフェースと前記カーネルアプリケーションプログラミングインタフェースとに基づいて、ターゲットカーネル演算子を生成するように構成されるターゲット生成モジュールとを備える、
演算子の生成装置。
【請求項7】
前記ターゲット生成モジュールは、さらに
前記1組のベースアプリケーションプログラミングインタフェースのうちの3種類のベースアプリケーションプログラミングインタフェースとカーネルアプリケーションプログラミングインタフェースとに基づいて、ターゲットカーネル演算子を生成するように構成され、
前記3種類のベースアプリケーションプログラミングインタフェースは、それぞれ入出力アプリケーションプログラミングインタフェース、計算アプリケーションプログラミングインタフェースおよび計算ルールアプリケーションプログラミングインタフェースであり、
前記入出力アプリケーションプログラミングインタフェースは、グローバルメモリとレジスタ間の読み書きを完了させるために用いられ、
前記計算アプリケーションプログラミングインタフェースは、汎用計算関数であり、
前記計算ルールアプリケーションプログラミングインタフェースは、計算アプリケーションプログラミングインタフェースにおける計算ルールを定義するために用いられ、前記計算ルールは前記計算アプリケーションプログラミングインタフェースの呼び出しに供するものである、
請求項6に記載の演算子の生成装置。
【請求項8】
前記ターゲット生成モジュールは、さらに
ベースアプリケーションプログラミングインタフェースに対する更新動作を検出したことに応答して、更新動作に応じて更新後の1組のベースアプリケーションプログラミングインタフェースを生成し、
前記更新後の1組のベースアプリケーションプログラミングインタフェースとカーネルアプリケーションプログラミングインタフェースとに基づいて、ターゲットカーネル演算子を生成するように構成される、
請求項6に記載の演算子の生成装置。
【請求項9】
前記第1の構築モジュールは、さらに
生成されるターゲットカーネル演算子のハードウェアアーキテクチャの類別に基づいて、1組のベースアプリケーションプログラミングインタフェースを構築するように構成される、
請求項6に記載の演算子の生成装置。
【請求項10】
前記計算ルールアプリケーションプログラミングインタフェースは、ユーザのニーズに応じて設定される請求項7に記載の演算子の生成装置。
【請求項11】
少なくとも1つのプロセッサと、
前記少なくとも1つのプロセッサと通信可能に接続されたメモリとを備える電子機器であって、
前記メモリには前記少なくとも1つのプロセッサによって実行可能な指令が格納され、前記指令が前記少なくとも1つのプロセッサによって実行されると、前記少なくとも1つのプロセッサに請求項1~5のいずれか1項に記載の演算子の生成方法を実行させる、
ことを特徴とする電子機器。
【請求項12】
コンピュータ指令が格納されている非一時的コンピュータ可読記憶媒体であって、
前記コンピュータ指令は請求項1~5のいずれか1項に記載の演算子の生成方法をコンピュータに実行させるために用いられることを特徴とする非一時的コンピュータ可読記憶媒体。
【請求項13】
プロセッサによって実行されると、請求項1~5のいずれか1項に記載の演算子の生成方法を実現するコンピュータプログラム。
【発明の詳細な説明】
【技術分野】
【0001】
本出願は、コンピュータ技術分野に関し、具体的にニューラルネットワークの技術分野に関し、特に演算子の生成方法および装置、電子機器、記憶媒体並びにコンピュータプログラムに関する。
【背景技術】
【0002】
現在の深層ニューラルネットワークフレームワークは大量の演算子を含んでおり、現在の演算子アーキテクチャでは、各演算子はカーネル(Kernel)関数を個別に開発する必要があり、異なるハードウェアはカーネルの実現も異なり、すなわち、従来の深層学習フレームワークでは、演算子ごとに、ハードウェアプラットフォームごとに少なくとも1つのカーネルが対応している。
【発明の概要】
【0003】
本出願の実施形態は、演算子の生成方法、装置、電子機器、記憶媒体およびコンピュータプログラムを提供する。
【0004】
第1の態様では、アクセス機能、ストレージ機能および演算機能のうちのいずれか1つの基本機能を提供するための1組のベースアプリケーションプログラミングインタフェースを構築するステップと、演算子ロジックを実現するために前記ベースアプリケーションプログラミングインタフェースを呼び出すためのカーネルアプリケーションプログラミングインタフェースを構築するステップと、前記1組のベースアプリケーションプログラミングインタフェースと前記カーネルアプリケーションプログラミングインタフェースとに基づいて、ターゲットカーネル演算子を生成するステップと、を含む、演算子の生成方法を提供する。
【0005】
第2の態様では、本出願の実施形態は、アクセス機能、ストレージ機能および演算機能のうちのいずれか1つの基本機能を提供するための1組のベースアプリケーションプログラミングインタフェースを構築するように構成される第1の構築モジュールと、演算子ロジックを実現するために前記ベースアプリケーションプログラミングインタフェースを呼び出すためのカーネルアプリケーションプログラミングインタフェースを構築するように構成される第2の構築モジュールと、1組のベースアプリケーションプログラミングインタフェースとカーネルアプリケーションプログラミングインタフェースとに基づいて、ターゲットカーネル演算子を生成するように構成されるターゲット生成モジュールとを備える演算子の生成装置を提供する。
【0006】
第3の態様では、本出願の実施形態は、1つまたは複数のプロセッサと、1つまたは複数のプログラムが格納されているメモリと、を備える電子機器であって、1つまたは複数のプログラムが1つまたは複数のプロセッサによって実行されると、1つまたは複数のプロセッサに第1の態様のいずれかの実施形態に記載の演算子の生成方法を実現する、電子機器を提供する。
【0007】
第4の態様では、本出願の実施形態は、コンピュータプログラムが格納されているコンピュータ可読記憶媒体であって、プログラムがプロセッサにより実行されると、第1の態様のいずれかの実施形態に記載の演算子の生成方法を実現するコンピュータ可読記憶媒体を提供する。
【0008】
第5の態様では、本出願の実施形態は、プロセッサによって実行されると、第1の態様のいずれかの実施形態に記載の演算子の生成方法を実現するコンピュータプログラムを提供する。
【0009】
本出願は、演算子の開発を促進し、演算子の保守性を向上させることができる。
【0010】
なお、発明の概要に記載された内容は、本出願の実施形態のかなめとなる特徴または重要な特徴を限定することを意図するものではなく、本出願の範囲を限定するものでもない。本出願の他の特徴は、以下の説明によって理解が容易になる。
【図面の簡単な説明】
【0011】
【
図1】本出願の適用可能な例示的なシステムアーキテクチャを示す図である。
【
図2】本出願に係る演算子の生成方法の一実施形態のフローチャートである。
【
図3】本出願に係る演算子の生成方法の一応用シーンの概略図である。
【
図4】本出願に係る演算子の生成方法の更なる実施形態のフローチャートである。
【
図5】本出願に係る演算子の生成装置の一実施形態の概略図である。
【
図6】本出願の実施形態を実現するための電子機器に適用されるコンピュータシステムの構造概略図である。
【発明を実施するための形態】
【0012】
以下は、図面を参照して本出願の例示的な実施形態を説明し、ここで理解を助けるため、本出願の実施形態の様々な詳細を記載するが、これらは単なる例示的なものに過ぎないことを理解すべきである。従って、本出願の範囲および要旨を逸脱しない限り、当業者が本明細書の実施形態に対して様々な変更および修正を行うことができることを理解すべきである。なお、以下の説明では、明確化および簡略化のため、公知の機能および構成については説明を省略する。
【0013】
なお、本出願の実施形態および実施形態における特徴は、矛盾を生じない限り、相互に組み合わせることができる。以下、図面および実施形態を参照しながら本出願を詳細に説明する。
【0014】
図1は、本出願に係る演算子の生成方法または演算子の生成装置の実施形態が適用可能な例示的なシステムアーキテクチャ100を示している。
【0015】
図1に示すように、システムアーキテクチャ100は、端末装置101、102、103、ネットワーク104、およびサーバ105を含んでもよい。ネットワーク104は、端末装置101、102、103とサーバ105との間で通信リンクを提供するための媒体として使用される。ネットワーク104は、有線、無線通信リンクまたは光ファイバケーブルなどの様々なタイプの接続を含んでもよい。
【0016】
ユーザは、メッセージを送受信するために、端末装置101、102、103を使用してネットワーク104を介してサーバ105と情報のやり取りをすることができる。端末装置101、102、103には、深層ニューラルネットワークフレームワークをインストールすることができる。
【0017】
端末装置101、102、103は、ハードウェアであってもよいし、ソフトウェアであってもよい。端末装置101、102、103がハードウェアである場合、表示画面を有する様々な電子機器であってもよく、携帯電話およびラップトップコンピュータなどを含むが、これらに限定されることはない。端末装置101、102および103がソフトウェアである場合、上記の電子機器にインストールされてもよい。複数のソフトウェアまたはソフトウェアモジュール(例えば、演算子の生成サービスを提供するためのもの)として実装されてもよく、または単一のソフトウェア若しくはソフトウェアモジュールとして実装されてもよい。ここでは特に限定しない。
【0018】
サーバ105は、例えば、アクセス機能、ストレージ機能および演算機能のうちのいずれか1つの基本機能を提供するための1組のベースアプリケーションプログラミングインタフェースを構築し、演算子ロジックを実現するために前記ベースアプリケーションプログラミングインタフェースを呼び出すためのカーネルアプリケーションプログラミングインタフェースを構築し、1組のベースアプリケーションプログラミングインタフェースとカーネルアプリケーションプログラミングインタフェースとに基づいて、ターゲットカーネル演算子を生成する様々なサービスを提供するサーバであってもよい。
【0019】
なお、サーバ105は、ハードウェアであってもよいし、ソフトウェアであってもよい。サーバ105がハードウェアである場合、複数のサーバから構成される分散サーバクラスターとしても、単一のサーバとしても実装可能である。サーバがソフトウェアである場合、複数のソフトウェアまたはソフトウェアモジュール(例えば、演算子の生成サービスを提供するためのもの)として実装されてもよく、または単一のソフトウェア若しくはソフトウェアモジュールとして実装されてもよい。ここでは特に限定しない。
【0020】
なお、本出願の実施形態によって提供される演算子の生成方法は、サーバ105によって実行されてもよいし、端末装置101、102、103によって実行されてもよいし、サーバ105と端末装置101、102、103との協働により実行されてもよい。対応して、演算子の生成装置に含まれる各部分(例えば各ユニット、サブユニット、モジュール、サブモジュール)は、すべてサーバ105に設けられてもよく、すべて端末装置101、102、103に設けられてもよく、さらにサーバ105および端末装置101、102、103にそれぞれ設けられてもよい。
【0021】
図1における端末装置、ネットワークおよびサーバの数は例示的なものに過ぎないことを理解すべきである。実装の必要に応じて、端末装置、ネットワークおよびサーバの数を任意に加減してもよい。
【0022】
図2は、演算子の生成方法の実施形態のフロー概略
図200を示している。当該演算子の生成方法は、次のステップを含む。
【0023】
ステップ201では、1組のベースアプリケーションプログラミングインタフェースを構築する。
【0024】
本実施形態では、実行主体(例えば、
図1のサーバ105または端末装置101、102、103)は、1組のベースアプリケーションプログラミングインタフェース(ベースAPI(Application Programming Interface,アプリケーションプログラミングインタフェース)ともいう)、すなわち、1組のPrimitive APIを構築することができ、ベースAPIは、モジュールレベルの装置関数に対応し、マルチスレッド環境でマルチスレッドを用いて機能を実行する関数であって、アクセス機能(データ読み取り機能)、ストレージ機能(データ書き込み機能)および演算機能のうちの少なくとも1つの基本機能を提供する。
【0025】
ここで、APIは、アプリケーションおよび開発者が、ソースコードにアクセスすることなく、または内部動作メカニズムの詳細を理解することなく、特定のソフトウェアまたはハードウェアに基づいてアクセスすることができる1組のルーチンを提供することを目的とする、いくつかの事前に定義された関数である。
【0026】
ここで、ベースAPIは、主に例えばGPU(Graphics Processing Unit,グラフィックス プロセッシング ユニット)、NPU(Neural-Network Processing Unit,ニューラルネットワークプロセッシングユニット)などのようなSIMD(Single Instruction Multiple Data,シングルインストラクション・マルチプルデータ)ハードウェアアーキテクチャ向けである。
【0027】
具体的には、SIMDハードウェア構成のマルチスレッド環境では、ベースAPIは複数のスレッド(例えば、thread1、thread2、thread3)によって同時に呼び出され、スレッドごとに自分のローカル的なメモリ空間と共有メモリ空間を有する。
【0028】
なお、ベースAPIは単独でカーネル演算子とすることはできず、また、ハードウェアデバイスによって呼び出し得るベースAPIが異なる。
【0029】
ここで、1組のベースAPIは、1つまたは複数のベースAPIを含んでもよい。
【0030】
具体的には、1組のベースAPIは、10個のベースAPIを含んでもよく、そのうち、1個はアクセス機能を提供するためのベースAPIであり、1個はストレージ機能を提供するためのベースAPIであり、8個は異なる演算機能を提供するためのベースAPIである。
【0031】
ステップ202では、カーネルアプリケーションプログラミングインタフェースを構築する。
【0032】
本実施形態では、実行主体は、kernelレベルの関数に対応するカーネルアプリケーションプログラミングインタフェースカーネル(kernel API)を構築し、カーネル演算子ごとに、ベースAPIを呼び出して演算子ロジックを実現するための一つのkernel APIに対応する。
【0033】
ここで、kernel APIは、異なるハードウェアデバイスに適用可能である。
【0034】
ステップ203では、1組のベースアプリケーションプログラミングインタフェースとカーネルアプリケーションプログラミングインタフェースとに基づいて、ターゲットカーネル演算子を生成する。
【0035】
本実施形態では、実行主体は、1組のベースAPIのうちの1つまたは複数のベースAPIと、1つのカーネルAPIとに基づいて、ターゲットカーネル演算子を生成することができ、すなわち、カーネル演算子を用いて、1組のベースAPIのうちの1つまたは複数のベースAPIを呼び出して、ターゲットカーネル演算子(すなわち、ターゲットkernel演算子)を生成することができる。
【0036】
具体的には、1組のベースAPIは、5個のベースAPIを含んでもよく、そのうち、1個はアクセス機能を提供するためのベースAPIであり、1個はストレージ機能を提供するためのベースAPIであり、3個は異なる演算機能を提供するためのベースAPIであって、それぞれA演算機能を提供するためのベースAPI、B演算機能を提供するためのベースAPIおよびC演算機能を提供するためのベースAPIである。実行主体は、カーネル演算子を用いて、当該組のベースAPIのうちの、アクセス機能を提供するためのベースAPI、A演算機能を提供するためのベースAPI、およびストレージ機能を提供するためのベースAPIを呼び出して、ターゲットAカーネル演算子を生成することができ、カーネル演算子を用いて、当該組のベースAPIのうちの、アクセス機能を提供するためのベースAPI、A演算機能を提供するためのベースAPI、B演算機能を提供するためのベースAPI、およびストレージ機能を提供するためのベースAPIを呼び出して、ターゲットDカーネル演算子を生成することができ、カーネル演算子を用いて、当該組のベースAPIのうちの、アクセス機能を提供するためのベースAPI、A演算機能を提供するためのベースAPI、B演算機能を提供するためのベースAPI、C演算機能を提供するためのベースAPI、およびストレージ機能を提供するためのベースAPIを呼び出して、ターゲットEカーネル演算子を生成することができる。
【0037】
ここで、ターゲットカーネル演算子の機能は、通常、そのターゲットカーネル演算子を生成する、演算機能を提供するベースAPIの機能に対応する。
【0038】
いくつかのオプション的な実施形態では、1組のベースアプリケーションプログラミングインタフェースとカーネルアプリケーションプログラミングインタフェースとに基づいて、ターゲットカーネル演算子を生成することは、ベースアプリケーションプログラミングインタフェースに対する更新動作を検出したことに応答して、更新動作に基づいて更新後の1組のベースアプリケーションプログラミングインタフェースを生成することと、更新後の1組のベースアプリケーションプログラミングインタフェースとカーネルアプリケーションプログラミングインタフェースとに基づいて、ターゲットカーネル演算子を生成することと、を含む。
【0039】
本実施形態では、実行主体は、ユーザによるベースAPIの更新動作の有無をリアルタイムまたは定期的に検出し、更新動作があると判断されたことに応答して、更新動作に基づいて更新後の1組のベースAPIを生成し、更新後の1組のベースAPIとkernel APIとに基づいて、ターゲットカーネル演算子を生成するようにすることができる。
【0040】
当該実施形態では、ベースAPIへの更新動作を検出したことに応答して、更新動作に基づいて更新後の1組のベースAPIを生成し、更新後の1組のベースAPIとkernel APIとに基づいて、ターゲットカーネル演算子を生成することにより、大量のカーネル演算子を最適化してアップグレードする際に、各カーネル演算子が呼び出した1組のベースAPIを直接最適化してアップグレードすればよく、大量のカーネル演算子を逐一アップグレードする必要がなくなり、開発最適化の効率が向上される。
【0041】
いくつかのオプション的な実施形態では、1組のベースアプリケーションプログラミングインタフェースを構築することは、生成されるターゲットカーネル演算子のハードウェアアーキテクチャの類別に基づいて、1組のベースアプリケーションプログラミングインタフェースを構築することを含む。
【0042】
本実施形態では、実行主体は、まず、生成されるターゲットカーネル演算子のハードウェアアーキテクチャの類別(例えば、GPU、NPUなど)を取得し、ハードウェアアーキテクチャの類別に基づいて、現在のハードウェアアーキテクチャに適合する1組のベースアプリケーションプログラミングインタフェースを構築することができる。
【0043】
具体的には、生成されるターゲットカーネル演算子のハードウェアアーキテクチャの類別がGPUである場合は、GPUアーキテクチャに適合する1組のベースアプリケーションプログラミングインタフェースを構築し、生成されるターゲットカーネル演算子のハードウェアアーキテクチャの類別がNPUである場合は、NPUアーキテクチャに適合する1組のベースアプリケーションプログラミングインタフェースを構築する。
【0044】
本実施形態では、生成されるターゲットカーネル演算子のハードウェアアーキテクチャの類別に基づいて、1組のベースAPIを構築し、さらに1組のベースAPIとkernel APIとに基づいて、現在のハードウェアアーキテクチャに適応したターゲットカーネル演算子を生成することにより、異なるハードウェアアーキテクチャの条件下で、1組のベースAPIとkernel APIとに基づいて、ターゲットカーネル演算子を生成することを実現し、ハードウェア移行時に大量のカーネル演算子に対してハードウェアアーキテクチャに適応的な変更を行うことを避け、すなわち現在のハードウェアアーキテクチャに適応した1組のベースAPIを構築するだけで済み、ハードウェア移行のコストを効果的に低減できる。
【0045】
次に、本実施形態に係る演算子の生成方法の応用シーンの概略図である
図3を参照する。実行主体301は、1組のベースAPI302を構築することができ、当該組のベースAPIは、アクセス機能を提供するためのベースAPI、ストレージ機能を提供するためのベースAPI、および演算機能を提供するためのベースAPIの3つのベースAPIを含んでもよい。例えば、当該組のベースAPIは、アクセス機能を提供するためのベースAPI、ストレージ機能を提供するためのベースAPI、M演算機能を提供するためのベースAPI、およびN演算機能を提供するためのベースAPIの合計で4つのベースAPIを含んでもよい。さらに、実行主体は、ベースAPIを呼び出して演算子ロジックを実現するためのkernel API303を構築し、1組のベースAPI302およびkernel API303に基づいて、ターゲットカーネル演算子304を生成する。例えば、kernel APIを用いてアクセス機能を提供するためのベースAPI、ストレージ機能を提供するためのベースAPI、およびM演算機能を提供するためのベースAPIを呼び出してターゲットMカーネル演算子を生成する。
【0046】
本出願の実施形態に係る演算子の生成方法は、アクセス機能、ストレージ機能、および演算機能のうちのいずれか1つの基本機能を提供するための1組のベースアプリケーションプログラミングインタフェースを構築し、演算子ロジックを実現するために前記ベースアプリケーションプログラミングインタフェースを呼び出すためのカーネルアプリケーションプログラミングインタフェースを構築し、1組のベースアプリケーションプログラミングインタフェースとカーネルアプリケーションプログラミングインタフェースとに基づいて、ターゲットカーネル演算子を生成し、すなわち、カーネルAPIを介して限られた数のベースAPIを呼び出すことによって、あらゆる機能タイプのターゲットカーネル演算子を生成することができ、従来技術における大量の機能の異なるカーネル演算子を個別に開発する必要があるとの問題を解決し、演算子の開発が効果的に促進され、演算子の保守性が向上された。
【0047】
さらに、
図2に示す演算子の生成方法のもう一つの実施形態の流れ400を示す
図4を参照する。本実施形態では、演算子の生成方法のフロー400は、次のステップを含んでもよい。
【0048】
ステップ401では、1組のベースアプリケーションプログラミングインタフェースを構築する。
【0049】
本実施形態では、ステップ401の実現の詳細および技術的効果は、ステップ201の記述を参照してもよく、ここでその説明を省略する。
【0050】
ステップ402では、カーネルアプリケーションプログラミングインタフェースを構築する。
【0051】
本実施形態では、ステップ402の実現の詳細および技術的効果は、ステップ202の記述を参照してもよく、ここでその説明を省略する。
【0052】
ステップ403では、1組のベースアプリケーションプログラミングインタフェースのうちの3種類のベースアプリケーションプログラミングインタフェースとカーネルアプリケーションプログラミングインタフェースとに基づいて、ターゲットカーネル演算子を生成する。
【0053】
本実施形態では、実行主体は、1組のベースアプリケーションプログラミングインタフェースのうちの3種類のベースアプリケーションプログラミングインタフェースと1つのカーネルアプリケーションプログラミングインタフェースとに基づいて、ターゲットカーネル演算子を生成することができる。
【0054】
このうち、3種類のベースアプリケーションプログラミングインタフェースは、入出力アプリケーションプログラミングインタフェースであるIO API、計算アプリケーションプログラミングインタフェースであるCompute API、及び計算ルールアプリケーションプログラミングインタフェースであるOpFunc APIである。
【0055】
ここで、IO APIはグローバルメモリとレジスタ間の読み書きを行うためのAPIであり、Compute APIは汎用計算関数であり、例えばElementwiseBinary、ElementwiseUnaryなどであり、OpFunc APIはComputeAPIにおける計算ルールを定義し、Compute APIにより呼び出すために用いられる。
【0056】
具体的には、add動作を実現するには、Compute API(例えばElementwiseBinaryなど)により呼び出すためにOpFunc API(例えば、AddFunctorなど)を定義する必要がある。
【0057】
ここで、OpFunc APIは、デフォルトのOpFunc APIをそのまま用いてもよいし、必要に応じてカスタマイズしてもよく、本出願はこれに対する限定はしない。
【0058】
なお、上記の3種類のベースAPIはいずれもBlockレベルのマルチスレッドAPIであり、現在のBlockのデータポインタおよび動作タイプに直接伝送して対応する計算を行うことができる。
【0059】
具体的には、IO APIにおけるデータの読み取り、すなわちReadDataは、グローバルメモリからオンチップメモリにデータを読み取り、次のようなCUDAプログラミング(Compute Unified Device Architecture,クーダ)コードで表すことができる。
【0060】
template<typename Tx,typename Ty,int NX,int NY,int BlockSize,bool IsBoundary=false>
_device_void ReadData(Ty*dst,const Tx*src,int size_nx,int size_ny,int stride_nx,int stride_ny);
【0061】
Compute APIにおけるデータ規約であるReduceは、元のデータを可能な限り保持することを前提として、データ量を最大限に減らし、次のようなコードで表すことができる。
【0062】
template<typename T,int NX,int NY,int BlockSize,class ReduceFunctor,ReduceMode Mode>
_device_void Reduce(T*out,T*in,ReduceFunctor reducer,bool reduce_last_dim);
【0063】
完全なターゲットカーネル演算子、例えばadd演算子は、具体的に次のようなコードで表すことができる。
【0064】
InT args[2][VecSize];
OutT result[VecSize];
//load
kps::Init<InT,VecSize>(args[0],static_cast<InT>(1.0f));
kps::Init<InT,VecSize>(args[1],static_cast<InT>(1.0f));
kps::ReadData<InT,VecSize,1,1,IsBoundary>(args[0],in[0]+data_offset,num);
kps::ReadData<InT,VecSize,1,1,IsBoundary>(args[1],in[1]+data_offset,num);
//compute
kps::ElementwiseBinary<InT,OutT,VecSize,1,1,Functor>(result,args[0],args[1],func);
//store
kps::WriteData<OutT,VecSize,1,1,IsBoundary>(out+data_offset,result,num);
【0065】
いくつかのオプション的な実施形態では、計算ルールアプリケーションプログラミングインタフェースは、ユーザのニーズに応じて設定される。
【0066】
本実施形態では、実行主体は、1組のベースAPIのうちの3種類のベースAPIと1つのカーネルAPIとに基づいてターゲットカーネル演算子を生成することができ、そのうち、計算ルールAPIであるOpFunc APIは、ユーザのニーズに応じてカスタマイズして生成することができる。
【0067】
本実施形態では、1組のベースAPIのうちの3種類のベースAPIと1つのカーネルAPIとに基づいてターゲットカーネル演算子を生成し、計算ルールAPIをユーザのニーズに応じて設定することで、演算子の開発効率と柔軟性をさらに高めることができる。
【0068】
本出願の上記実施形態は、
図2に示した実施形態と比較して、1組のベースアプリケーションプログラミングインタフェースの構築、カーネルアプリケーションプログラミングインタフェースの構築、1組のベースアプリケーションプログラミングインタフェースのうちの3種類のベースアプリケーションプログラミングインタフェースとカーネルアプリケーションプログラミングインタフェースに基づいたターゲットカーネル演算子の生成を強調し、3種類のベースアプリケーションプログラミングインタフェースは、それぞれ入出力アプリケーションプログラミングインタフェース、計算アプリケーションプログラミングインタフェースおよび計算ルールアプリケーションプログラミングインタフェースであり、すなわち、限られた3種類のベースアプリケーションプログラミングインタフェース(入出力アプリケーションプログラミングインタフェース、計算アプリケーションプログラミングインタフェースおよび計算ルールアプリケーションプログラミングインタフェース)とカーネルアプリケーションプログラミングインタフェースとに基づいて、ターゲットカーネル演算子を生成することにより、コードをさらに簡略化し、演算子開発の効率化と保守性の向上に寄与することができる。
【0069】
更に
図5を参照すると、上記の各図に示された方法の実施態様として、本出願は、演算子の生成装置の一実施形態を提供し、当該装置の実施形態は、
図1に示された方法の実施形態に対応しており、当該装置は具体的に様々な電子機器に適用することができる。
【0070】
図5に示すように、本実施形態の演算子の生成装置500は、第1の構築モジュール501と、第2の構築モジュール502と、ターゲット生成モジュール503とを備える。
【0071】
ここで、第1の構築モジュール501は、アクセス機能、ストレージ機能、および演算機能のうちのいずれか1つの基本機能を提供するための1組のベースアプリケーションプログラミングインタフェースを構築するように構成されてもよい。
【0072】
第2の構築モジュール502は、演算子ロジックを実現するために前記ベースアプリケーションプログラミングインタフェースを呼び出すためのカーネルアプリケーションプログラミングインタフェースを構築するように構成されてもよい。
【0073】
ターゲット生成モジュール503は、1組のベースアプリケーションプログラミングインタフェースとカーネルアプリケーションプログラミングインタフェースとに基づいて、ターゲットカーネル演算子を生成するように構成されてもよい。
【0074】
本実施形態のいくつかのオプション的な実施形態では、ターゲット生成モジュールはさらに、
1組のベースアプリケーションプログラミングインタフェースのうちの3種類のベースアプリケーションプログラミングインタフェースとカーネルアプリケーションプログラミングインタフェースとに基づいて、ターゲットカーネル演算子を生成するように構成され、3種類のベースアプリケーションプログラミングインタフェースは、それぞれ入出力アプリケーションプログラミングインタフェース、計算アプリケーションプログラミングインタフェースおよび計算ルールアプリケーションプログラミングインタフェースであり、入出力アプリケーションプログラミングインタフェースは、グローバルメモリとレジスタ間の読み書きを完了するために用いられ、計算アプリケーションプログラミングインタフェースは汎用計算関数であり、計算ルールアプリケーションプログラミングインタフェースは、計算アプリケーションプログラミングインタフェースにおける計算ルールを定義するために用いられ、計算アプリケーションプログラミングインタフェースの呼び出しに供するものである。
【0075】
本実施形態のいくつかのオプション的な実施形態では、ターゲット生成モジュールはさらに、
ベースアプリケーションプログラミングインタフェースに対する更新動作を検出したことに応答して、更新動作に基づいて更新後の1組のベースアプリケーションプログラミングインタフェースを生成することと、更新後の1組のベースアプリケーションプログラミングインタフェースとカーネルアプリケーションプログラミングインタフェースとに基づいて、ターゲットカーネル演算子を生成するように構成される。
【0076】
本実施形態のいくつかのオプション的な実施形態では、第1の構築モジュールはさらに、
生成されるターゲットカーネル演算子のハードウェアアーキテクチャの類別に基づいて、1組のベースアプリケーションプログラミングインタフェースを構築するように構成される。
【0077】
本実施形態のいくつかのオプション的な実施形態では、計算ルールアプリケーションプログラミングインタフェースは、ユーザのニーズに応じて設定される。
【0078】
本出願の技術方案では、関連するユーザ個人情報の取得、記憶および応用などは、いずれも関連法律法規の規定に準拠し、且つ公序良俗に反しない。
【0079】
本出願の実施形態によれば、本出願はさらに電子機器、読み取り可能な記憶媒体およびコンピュータプログラムを提供する。
【0080】
図6に示すように、本出願の実施形態に係る演算子の生成方法を実行する電子機器のブロック図である。
【0081】
600は、本出願の実施形態に係る演算子の生成方法を実行する電子機器のブロック図である。電子機器は、ラップトップコンピュータ、デスクトップコンピュータ、ワークステーション、パーソナルデジタルアシスタント、サーバ、ブレード型サーバ、メインフレームコンピュータおよびその他の適切なコンピュータ等の様々な形態のデジタルコンピュータを表す。また、電子機器は、個人デジタル処理、携帯電話、スマートフォン、ウェアラブル機器およびその他の類似するコンピューティングデバイス等の様々な形態のモバイルデバイスを表すことができる。なお、ここで示したコンポーネント、それらの接続関係、およびそれらの機能はあくまでも例示であり、ここで記述および/または要求した本出願の実施形態を限定することを意図するものではない。
【0082】
図6に示すように、当該電子機器は、1つまたは複数のプロセッサ601と、メモリ602と、各コンポーネントを接続するためのインタフェース(高速インタフェースおよび低速インタフェースを含む)とを含む。各コンポーネントは、互いに異なるバスで接続されており、共通のマザーボード上に実装されていてもよいし、必要に応じて他の方法で実装されてもよい。プロセッサは、電子機器内で実行される指令を処理することができ、前記指令は、インタフェースに結合された表示装置等の外部入出力装置にグラフィカルユーザインタフェース(GUI,Graphical User Interface)のグラフィック情報を表示するために、メモリ内またはメモリ上に格納される指令を含む。他の実施形態では、必要に応じて、複数のプロセッサおよび/または複数のバスを、複数のメモリとともに使用することができる。また、複数の電子機器が接続されていてもよく、各機器は、例えば、サーバアレイ、ブレードサーバ群またはマルチプロセッサシステムなど、一部の必要な動作を提供する。
図6では、1つのプロセッサ601を例としている。
【0083】
メモリ602は、本出願に係る非一時的コンピュータ可読記憶媒体である。ここで、前記メモリには、少なくとも1つのプロセッサにより実行され得る指令が格納されており、それにより前記少なくとも1つのプロセッサに本出願に係る演算子の生成方法を実行させる。本出願の非一時的コンピュータ可読記憶媒体はコンピュータ指令が格納され、当該コンピュータ指令は本出願に係る演算子の生成方法をコンピュータに実行させるために用いられる。
【0084】
メモリ602は、非一時的コンピュータ可読記憶媒体として、非一時的ソフトウェアプログラム、非一時的コンピュータ実行可能なプログラムおよびモジュール(例えば、本出願の実施形態における演算子の生成方法に対応するプログラム指令/モジュール(例えば、
図5に示す第1の構築モジュール501および第2の構築モジュール502))を格納することに用いることができる。プロセッサ601は、メモリ602に格納された非一時的ソフトウェアプログラム、指令およびモジュールを実行することにより、サーバの各種機能アプリケーションおよびデータ処理を実行し、すなわち上記方法実施形態における演算子の生成方法を実現する。
【0085】
メモリ602は、オペレーティングシステム、少なくとも1つの機能に必要なアプリケーションを記憶できるプログラム記憶領域と、演算子の生成に応じて電子機器の使用に作成されたデータ等を記憶できるデータ記憶領域とを備えてもよい。また、メモリ602は高速ランダムアクセスメモリを含むことができ、また非一時的メモリ(例えば、少なくとも1つの磁気ディスク記憶装置、フラッシュメモリデバイスまたはその他の非一時的ソリッドステート記憶装置)を含んでもよい。いくつかの実施形態において、メモリ602は、オプションとしてプロセッサ601と遠隔に設置されたメモリを含み、これらの遠隔に設置されたメモリはネットワークを介して演算子の生成の電子機器に接続されてもよい。上記ネットワークの実例としては、インターネット、企業イントラネット、ローカルエリアネットワーク、移動体通信ネットワークおよびこれらの組み合わせなどが挙げられるが、それらに限定されることはない。
【0086】
演算子の生成方法を実行する電子機器は、さらに入力装置603および出力装置604を含んでもよい。プロセッサ601、メモリ602、入力装置603および出力装置604は、バスまたはその他の方法で接続されてもよく、
図6ではバスで接続されている例を示している。
【0087】
例えばタッチパネル、キーパッド、マウス、トラックパッド、タッチパッド、ポインティングデバイス、1つまたは複数のマウスボタン、トラックボール、ジョイスティック等の入力装置603は、入力された数字または文字情報を受信でき、演算子の生成のための電子機器のユーザ設定および機能制御に関するキー信号の入力を生成することができる。出力装置604は表示装置、補助照明装置(例えば、LED)および触覚フィードバック装置(例えば、振動モータ)等を含むことができる。当該表示装置は、液晶ディスプレイ(LCD)、発光ダイオード(LED)ディスプレイおよびプラズマディスプレイを含むことができるが、これらに限定されない。いくつかの実施形態において、表示装置はタッチパネルであってもよい。
【0088】
ここで記述したシステムおよび技術の各実施形態はデジタル電子回路システム、集積回路システム、特定用途向け集積回路(Application Specific Integrated Circuit,ASIC)、コンピュータハードウェア、ファームウェア、ソフトウェア、および/またはそれらの組み合わせにおいて実装され得る。これらの各実施形態は、1つまたは複数のコンピュータプログラムに実装され、該1つまたは複数のコンピュータプログラムは少なくとも一つのプログラマブルプロセッサを含むプログラマブルシステムにおいて実行および/または解釈することができ、該プログラマブルプロセッサは専用または汎用プログラマブルプロセッサであってもよく、記憶システム、少なくとも一つの入力装置および少なくとも一つの出力装置からデータおよび指令を受信することができ、且つデータおよび指令を該記憶システム、該少なくとも一つの入力装置および該少なくとも一つの出力装置に伝送することを含み得る。
【0089】
これらのコンピュータプログラムは、プログラム、ソフトウェア、ソフトウェアアプリケーションまたはコードとも呼ばれ、プログラマブルプロセッサの機械語命令を含み、且つ高度プロセスおよび/またはオブジェクト指向のプログラミング言語、および/またはアセンブリ言語/機械語により実装され得る。ここで、「機械可読媒体」および「コンピュータ可読媒体」という用語は、機械命令および/またはデータをプログラマブルプロセッサに供給するための任意のコンピュータプログラム製品、機器、および/または装置(例えば、磁気ディスク、光ディスク、メモリ、プログラマブルロジックデバイス(PLD))を意味し、機械可読信号である機械命令を受信する機械可読媒体を含む。「機械可読信号」という用語は、機械指令および/またはデータをプログラマブルプロセッサに供給するためのあらゆる信号を意味する。
【0090】
ユーザとのインタラクションを提供するために、ここで説明するシステムと技術は、ユーザに情報を表示するための表示装置(例えば、陰極線管(Cathode Ray Tube,CRT)またはLCD(液晶ディスプレイ)モニタ)と、キーボードおよびポインティングデバイス(例えば、マウスまたはトラックボール)とを備えるコンピュータ上で実現することができ、ユーザが該キーボードおよび該ポインティングデバイスを介してコンピュータに入力を提供できる。他の種類の装置もユーザとのやりとりを行うことに用いることができる。例えば、ユーザに提供されるフィードバックは、例えば、視覚フィードバック、聴覚フィードバック、または触覚フィードバックであるいかなる形態のセンシングフィードバックであってもよく、且つ音入力、音声入力若しくは触覚入力を含むいかなる形態でユーザからの入力を受信してもよい。
【0091】
ここで説明したシステムおよび技術は、バックエンドコンポーネントを含むコンピューティングシステム(例えば、データサーバとして)に実施されてもよく、またはミドルウェアコンポーネントを含むコンピューティングシステム(例えば、アプリケーションサーバ)に実施されてもよく、またはフロントエンドコンポーネントを含むコンピューティングシステム(例えば、グラフィカルユーザインタフェースまたはウェブブラウザを有するユーザコンピュータ)に実施されてもよく、ユーザは該グラフィカルユーザインタフェースまたはウェブブラウザを介してここで説明したシステムおよび技術の実施形態とインタラクションしてもよく、またはこのようなバックエンドコンポーネント、ミドルウェアコンポーネントまたはフロントエンドコンポーネントのいずれかの組み合わせを含むコンピューティングシステムに実施されてもよい。また、システムの各コンポーネントの間は、通信ネットワーク等の任意の形態または媒体を介してデジタルデータ通信により接続されていてもよい。通信ネットワークとしては、ローカルエリアネットワーク(LAN)、ワイドエリアネットワーク(WAN)およびインターネットなどを含む。
【0092】
コンピュータシステムは、クライアントとサーバとを含んでもよい。クライアントとサーバは、通常、互いに離れており、通信ネットワークを介してやりとりを行う。クライアントとサーバとの関係は、互いにクライアント-サーバの関係を有するコンピュータプログラムをそれぞれのコンピュータ上で動作することによって生成される。
【0093】
本出願の実施形態に係る技術的解決手段により、演算子の開発が促進され、演算子の保守性が向上される。
【0094】
上述した様々な形態のフローを用いて、ステップを改めて並び替え、追加または削除を行っていてもよいことを理解すべきである。例えば、本出願に記載された各ステップは、本出願に開示された技術方案の所望の結果が達成できる限り、並行して実行されてもよく、順番に実行されてもよく、異なる順番で実行されてもよい。本明細書はここで制限をしない。
【0095】
上記具体的な実施形態は、本出願の保護範囲を限定するものではない。当業者であれば、設計要件および他の要因に従って、様々な修正、組み合わせ、副次的な組み合わせ、および置換を行うことができることを理解すべきである。本出願の趣旨および原理を逸脱せずに行われたあらゆる修正、均等な置換および改善などは、いずれも本出願の保護範囲内に含まれるべきである。