音声コーデック開発方法およびその関連技術
【課題】音声コーデックの開発において、コードサイズの減少およびコンパイラによる最適化を図る。
【解決手段】ベーシックオペレーションを純粋なアセンブラではなく、アセンブラ記述方法で開発する。さらに、このベーシックオペレーションをインライン関数として宣言し、ヘッダファイル内で記述することで、インライン展開先でコンパイラによる最適化が適用可能となる。インライン展開することは一般にコードサイズを増加させるという欠点がある。しかし、音声のベーシックオペレーションは、アセンブラでは一命令で記述できる場合が多い。そのため関数呼び出し命令が無くなり、コードサイズは減少する。
【解決手段】ベーシックオペレーションを純粋なアセンブラではなく、アセンブラ記述方法で開発する。さらに、このベーシックオペレーションをインライン関数として宣言し、ヘッダファイル内で記述することで、インライン展開先でコンパイラによる最適化が適用可能となる。インライン展開することは一般にコードサイズを増加させるという欠点がある。しかし、音声のベーシックオペレーションは、アセンブラでは一命令で記述できる場合が多い。そのため関数呼び出し命令が無くなり、コードサイズは減少する。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、ITU等で規格化されたベーシックオペレーションによって記述される音声コーデックの開発方法ならびにその関連技術に関するものである。
【背景技術】
【0002】
ITU(International Telecommunication Union:国際電気通信連合)で規格化されCソースコードで記述された音声コーデックは公開されている。この音声コーデックの処理は、ベーシックオペレーションという音声コーデック特有の演算を含んでいる。一般に、ベーシックオペレーションにはオーバーフロー補正付き、固定小数点位置、ビット精度といった演算が処理フローとして含まれており、現状のコンパイラではそのままコンパイルしても、高い処理性能は期待できない場合が多い。
【0003】
図9に公開されている規格の例を示す。図9(a)のresidu.cppは音声コーデック処理の一部を抜き出したもので、フィルター演算を行う部分である。この中のL_multやL_macが、ベーシックオペレーションである。図9(b)のbasic_op.cppは規格で公開されたベーシックオペレーションの一例であり、C言語で記述されている。これらL_multとL_macは、それぞれオーバーフロー補正付きの積算、積和演算を行うものであり、上記のようにこのままコンパイルしても、高い処理性能は期待できない。
【0004】
そのため、従来の音声コーデック開発では、このようなベーシックオペレーションだけは、規格で公開されたCソースコードを参考にアセンブラ言語で開発を行っている。逆に、単純にコンパイルして問題のない音声コーデック部は、公開されているCソースコードを基本的に、そのまま用いている。音声コーデック部の中でベーシックオペレーションを使用したいときは、関数呼び出しという方法によりアセンブラで書かれた命令を呼び出す。
【0005】
図10は従来の音声コーデック開発方法のフローチャートである。図10のフローチャートに示すように、先ずベーシックオペレーションが記述されたアセンブラファイルを読み込む(ステップS21)。このアセンブラファイルには、規格のCソースコードを参考にして、ベーシックオペレーションがアセンブラ言語で記述されている。次に、Cソースファイルを読み込む(ステップS22)。ステップS22のCソースファイルは音声コーデック部であり、規格のCソースコードをそのまま用いる。次に、ステップS21で読み込んだアセンブラファイルをアセンブルし、コンピュータで実行可能な形式へとオブジェクト化する(ステップS23)。同様にステップS22で読み込んだCソースファイルをコンパイルし、オブジェクト化する(ステップS24)。そして、ステップS23,S24で作成したオブジェクトをリンカによってリンクして実行体を生成する(ステップS25)。
【0006】
この従来の音声コーデック開発方法では、単純なコンパイルでは最適なコードを出力できない部分であるベーシックオペレーションのみをアセンブラで直接記述して、処理性能の低下を防いでいる。それ以外の単純なコンパイルで問題のない部分については、規格により提供されているCソースコードをそのまま用いる。
【0007】
図11は従来の音声コーデック開発方法で用いたCソースファイルとアセンブラファイルの具体例である。図11(a)のresidu.cppは音声コーデック部であり、基本的に規格のCソースコード(図9(a))をそのまま用いているが、アセンブラ命令_L_mult、_L_macを関数呼び出しするように変更されている。図11(b)のbasic_op.asmでは、関数L_mult、L_macの処理内容がアセンブラで記述されている。
【0008】
音声コーデックのプログラムが動くプロセッサの命令の一覧を図12に示す。図12のように、basic_op.asm内で使用されているfmul、fmacはそれぞれオーバーフロー補正付きの積算、積和演算を行うアセンブラ命令であり、図9(b)の規格のベーシックオペレーションのCソースコードと同等の処理を1命令で行うことができる。このresidu.cppとbasic_op.asmそれぞれをオブジェクト化しリンクすることで、実行体が作成される。
【特許文献1】特開平3−105626号公報(第2−3頁、第1図)
【発明の開示】
【発明が解決しようとする課題】
【0009】
従来の開発方法は、上記のように音声コーデック部からベーシックオペレーションを関数呼び出しという形で呼び出している。一般に関数呼び出しをするためには、アセンブラ上で“call”という1命令が必要となる。しかし、音声のベーシックオペレーションは、図12のfmul、fmacのようなアセンブラ1命令で記述可能な場合が多い。元々1命令で記述可能な関数を呼び出すのに、callという1命令を必要としており、コードサイズを増加させているという問題があった。
【0010】
さらに、アセンブラで記述されたベーシックオペレーションと、C言語等高級言語で記述された音声コーデック部とを別々にオブジェクト化しているため、コンパイラによるベーシックオペレーションの呼び出し前後を考慮した最適化(例:レジスタ割付、冗長除去等)が適用されないという課題もある。
【0011】
本発明は、上記課題を解決するためになされたものであり、コードサイズをよりコンパクトに、かつコンパイラによるベーシックオペレーション呼び出し前後を考慮した最適化を可能にする音声コーデック開発方法の提供を第一の目的とする。
【0012】
また、従来方法ではベーシックオペレーションの全てを人手でアセンブラ化していた。しかしながら、コンパイラの性能により、ベーシックオペレーションの中には単純なコンパイルで最適なコードを出力できるものがある。そこで、全てのベーシックオペレーションについてコンパイルで問題なく最適なコードが出力されるかどうかを判定し、最適なアセンブラコードが出力されるベーシックオペレーションは、コンピュータによって最適化ASM文で作成し、ヘッダファイルへ記述するヘッダファイル生成方法の提供を第二の目的とする。ここで、最適化ASM文とは、C言語等高級言語の中でアセンブラ命令で記述された文であり、コンパイラによる最適化が可能な文である。
【0013】
また、一部のベーシックオペレーションはコンピュータにより自動で規格のCソースから、本発明の音声コーデック開発方法で用いるヘッダファイル内へ記述できるが、コンパイラによって最適なアセンブラコードが出力されないベーシックオペレーションは人手でヘッダファイル内に記述しなければならない。そのため、人手で記述すべきベーシックオペレーションを選択するベーシックオペレーション選択方法の提供を第三の目的とする。
【課題を解決するための手段】
【0014】
上記第一の目的を達成するため、本発明の音声コーデック開発方法は、
ソースファイルを読み込む第1のステップと、
読み込んだ前記ソースファイル内でインクルードされているヘッダファイルを読み込む第2のステップと、
前記ソースファイルと前記ヘッダファイルをコンパイルする第3のステップ
とを含む音声コーデック開発方法において、
前記第2のステップの前記ヘッダファイルでベーシックオペレーションがインライン関数として宣言され、かつ処理内容がアセンブラ記述で書かれており、
前記第1のステップの前記ソースファイルでは前記ベーシックオペレーションを使った処理が記述され、かつ前記ヘッダファイルをインクルード(取り込み指示)していることを特徴とするものである。
【0015】
別言すれば、本発明による音声コーデック開発方法は、
ベーシックオペレーションがインライン関数として宣言され、かつ処理内容がアセンブラ記述で書かれているヘッダファイルと、前記ベーシックオペレーションを使った処理が記述され、かつ前記ヘッダファイルをインクルードしているソースファイルとを対象として、
前記ソースファイルを読み込む第1のステップと、
前記読み込んだ前記ソースファイル内でインクルードされているヘッダファイルを読み込む第2のステップと、
前記ソースファイルと前記ヘッダファイルをコンパイルする第3のステップ
とを含むものである。
【0016】
すなわち、本発明の音声コーデック開発方法は、ベーシックオペレーションをインライン展開することを特徴としている。一般にインライン展開は、展開先で関数の中身を貼り付ける形となるため、関数の中身が長いとコードサイズは増加してしまう。しかし、音声コーデックのベーシックオペレーションに限ればアセンブラ1命令で記述できることが多いため、インライン展開すれば関数の呼び出し命令や戻り命令が必要なくなるという利点がある。これは、コードサイズの削減という効果に繋がる。また、ベーシックオペレーションのインライン展開先で、コンパイラによる関数呼び出し前後を考慮した最適化(命令並び替え、冗長除去、レジスタ割付等)を適用可能にする。
【0017】
本発明の音声コーデックプログラムは、コードサイズの削減により使用メモリサイズの削減に有利であるとともに、最適化による実行速度の高速化に有利である。
【0018】
また、上記第二の目的を達成するため、本発明のヘッダファイル生成方法は、コンピュータによりベーシックオペレーションを記述したヘッダファイルを生成する方法であって、
規格で公開されたベーシックオペレーションが記述されたソースファイルを読み込む第1のステップと、
前記ソースファイルをコンパイルしてアセンブラファイルを生成する第2のステップと、
前記アセンブラファイルに記述された前記ベーシックオペレーションの行数を計測する第3のステップと、
前記第3のステップで計測した行数と規定のワード数とを比較する第4のステップと、
前記計測した行数が前記規定のワード数以下のときに、前記アセンブラファイルに基づいてヘッダファイルを生成する第5のステップ
とを含むヘッダファイル生成方法であって、
前記第5のステップで作成する前記ヘッダファイルでは、前記ベーシックオペレーションがインライン関数として宣言され、かつ処理内容がアセンブラ記述(最適化ASM文)されていることを特徴とするものである。
【0019】
別言すれば、本発明のヘッダファイル生成方法は、
規格で公開されたベーシックオペレーションが記述されたソースファイルを読み込む第1のステップと、
前記ソースファイルをコンパイルしてアセンブラファイルを生成する第2のステップと、
前記アセンブラファイルに記述された前記ベーシックオペレーションの行数を計測する第3のステップと、
前記第3のステップで計測した行数と規定のワード数とを比較する第4のステップと、
前記計測した行数が前記規定のワード数以下のときに、前記アセンブラファイルに基づいて、前記ベーシックオペレーションがインライン関数として宣言され、かつ処理内容がアセンブラ記述された状態のヘッダファイルを生成する第5のステップ
とを含むことを特徴とするものである。
【0020】
ソースファイル内に記述された多くのベーシックオペレーションの中から、コンパイラが最適なアセンブラコードを出力可能なもの(計測行数が規定ワード数以下)については、コンピュータによってヘッダファイルを自動的に作成するので、開発の手間を省く上で有効である。
【0021】
また、上記第三の目的を達成するため、本発明のベーシックオペレーション選択方法は、人手で開発しなければならないベーシックオペレーションを選択し、画面表示等する方法であって、
規格で公開されたベーシックオペレーションが記述されたソースファイルを読み込む第1のステップと、
前記ソースファイルをコンパイルしアセンブラファイルを生成する第2のステップと、
前記アセンブラファイルに記述された前記ベーシックオペレーションの行数を計測する第3のステップと、
前記第3のステップで計測した行数と規定のワード数とを比較する第4のステップと、
前記計測した行数が前記規定のワード数を超えるときに、前記第3のステップで行数を計測した前記ベーシックオペレーションの関数名を出力(画面表示等)する第5のステップ
とを含むことを特徴とするものである。
【0022】
これによれば、ソースファイル内に記述された多くのベーシックオペレーションの中から、人手のアセンブラ記述を要するベーシックオペレーションを自動的にリストアップすることができる。
【0023】
本発明の音声コーデックプログラムは、上記の音声コーデック開発方法により作成されたものである。
【発明の効果】
【0024】
本発明の音声コーデック開発方法によれば、ベーシックオペレーションをインライン展開して関数の呼び出し命令や戻り命令を不要化するので、コードサイズを削減できるとともに、インライン展開先でコンパイラによる関数呼び出し前後を考慮した最適化(命令並び替え、冗長除去、レジスタ割付等)を実現できる。
【0025】
本発明の音声コーデック開発方法によって作成されたコンピュータ実行可能なプログラムは、コードサイズの減少による使用メモリサイズの減少および、コンパイラによる最適化によって実行速度の向上という効果を持つ。
【0026】
本発明のヘッダファイル生成方法は、Cソース内に記述された多くのベーシックオペレーションの中から、コンパイラが最適なアセンブラコードを出力可能なものはコンピュータによってヘッダファイルの作成を行い、開発の手間を省く効果を持つ。
【0027】
本発明のベーシックオペレーション選択方法は、Cソース内に記述された多くのベーシックオペレーションの中から、人手で最適化ASM文を記述しなければならないベーシックオペレーションをリストアップし、開発者が全てのベーシックオペレーションをチェックする手間を軽減する効果を持つ。
【発明を実施するための最良の形態】
【0028】
以下、本発明にかかわる音声コーデック開発方法の実施の形態を図面に基づいて詳細に説明する。
【0029】
(実施の形態1)
図1は、本発明の実施の形態1の音声コーデック開発方法におけるハードウェア構成を示すブロック図である。本実施の形態の音声コーデック開発方法で使用するハードウェアシステムは、図1のように、中央処理装置(CPU)1と、データの格納を行うデータ入出力システム2とから構成されている。
【0030】
ここで、データ入出力システム2はディスク装置4と主記憶装置5とから構成されている。ディスク装置4には、音声コーデック処理が記述されたCソースファイル、ベーシックオペレーションが最適化ASM文として記述されたヘッダファイルと、コンパイラ6によって作成された実行体(実行可能プログラム)が格納される。主記憶装置5はディスク装置4の制御プログラム等が記憶される。
【0031】
また、中央処理装置1は、コンパイラ6から構成されている。コンパイラ6は、ディスク装置4にあるソースファイル、ヘッダファイルを主記憶装置5へ読み込み、オブジェクト化する。さらに、作成したオブジェクトをリンクし実行体にして、ディスク装置4に格納する。
【0032】
図2はディスク装置4に格納されるソースファイル、ヘッダファイルの具体例である。図2(a)のresidu.cppは、従来方法(図11(a))と同様、規格で公開されているCソースコード(図9(a))をそのまま使用しているが、ベーシックオペレーションが記述されたヘッダファイル(basic_op.h)をインクルードする命令が付け加えられている。図2(b)のbasic_op.hはインクルードされるヘッダファイルである。図2(b)のように、ベーシックオペレーション関数L_mult、L_macがそれぞれインライン(inlinec)宣言され、かつ最適化ASM文で処理内容が記述されている。
【0033】
図3に、本発明の実施の形態で用いる最適化ASM文の記述方法について示す。図3において、ロード式とはレジスタにC言語の変数や四則演算などの式の結果を格納する式であり、ストア式とはレジスタの値をC言語の変数等に格納する式であり、命令指定部とはアセンブラ命令を記述する場所である。
【0034】
以下、本実施の形態の音声コーデック開発方法の動作例を図4のフローチャートを用いて説明する。
【0035】
図2に示したソースファイルresidu.cpp、ヘッダファイルbasic_op.hはディスク装置4に格納されている。
【0036】
先ず、コンパイラ6において、ディスク装置4にあるソースファイルresidu.cppを主記憶装置5へ読み込む(ステップS1)。
【0037】
次に、コンパイラ6において、ステップS1で読み込んだソースファイルresidu.cpp内でインクルードされているヘッダファイルbasic_op.hを、ディスク装置4から主記憶装置5へ読み込む(ステップS2)。
【0038】
次に、コンパイラ6において主記憶装置5に読み込んだソースファイルresidu.cppとヘッダファイルbasic_op.hをコンパイルしてオブジェクト化する。そして、両オブジェクトをリンクして実行体を作成し、ディスク装置4へ格納する(ステップS3)。
【0039】
ソースファイルresidu.cppでは、ヘッダファイルbasic_op.hがインクルードされ、且つインライン関数L_multやL_macは関数呼び出しされる場所に埋め込まれる。そのため、実際にコンパイルするソースコードは図5のようになる。したがって、ステップS3では図5のCソースファイルをコンパイルしていることと同じである。
【0040】
本実施の形態の音声コーデック開発方法によれば、ベーシックオペレーション呼び出し前後を考慮した最適化(命令並び替え、冗長除去、レジスタ割付等)が適用され、且つ関数の呼び出し命令を削減することにより、コードサイズの削減を実現することができる。
【0041】
(実施の形態2)
次に、本発明の実施の形態2のヘッダファイル生成方法におけるハードウェア構成のブロック図を図6に示す。この図6は、本発明の実施の形態3のベーシックオペレーション選択方法にも適用されるものである。図1と同様、中央処理装置(CPU)1と、データの格納と入出力を行うデータ入出力システム2とから構成されている。
【0042】
ここで、データ入出力システム2は、出力装置3とディスク装置4と主記憶装置5とから構成されている。出力装置3は、ディスプレイ等の必要なデータを表示するため装置である。ディスク装置4には、規格で公開されているベーシックオペレーションが記述されたCソースファイルが格納されている。主記憶装置5は、これら出力装置3、ディスク装置4の制御プログラム等を記憶する。また、中央処理装置1は、コンパイラ6、行数カウント手段7、コード数判定手段8、ヘッダファイル生成手段9、表示手段10およびベーシックオペレーション探索手段11から構成されている。
【0043】
コンパイラ6は、ディスク装置4に格納されているベーシックオペレーションが記述されたCソースファイルを主記憶装置5へ読み込み、アセンブラファイル化する。その後、出力したアセンブラファイルを主記憶装置5へ格納する。
【0044】
行数カウント手段7は、コンパイラ6によって出力された主記憶装置5上のアセンブラファイルの中で、先頭のベーシックオペレーション、またはベーシックオペレーション探索手段11より送られた関数名のベーシックオペレーションの行数をカウントし、その関数名と行数Xをコード数判定手段8へ送る。
【0045】
コード数判定手段8は、行数カウント手段7から送られてきた行数Xと規定のワード数Aとの大小関係を判定する。X>Aならば、行数カウント手段7から送られたベーシックオペレーションの関数名を表示手段10へ送る。X≦Aならば、行数カウント手段7から送られたベーシックオペレーションの関数名をヘッダファイル生成手段9へ送る。
【0046】
ヘッダファイル生成手段9は、主記憶装置5にあるアセンブラファイルから、コード数判定手段8より送られた関数名のベーシックオペレーションを探索する。次に、そのベーシックオペレーションを最適化ASM文に変換し、インライン関数化を施し、Cヘッダファイル内に記述し、そのヘッダファイルをディスク装置4へ格納する。最後に、その関数名をベーシックオペレーション探索手段11へ送る。
【0047】
表示手段10は、コード数判定手段8より送られた関数名を出力装置3へ渡し、表示する。その後、その関数名をベーシックオペレーション探索手段11へ送る。
【0048】
ベーシックオペレーション探索手段11は、主記憶装置5にあるアセンブラファイルから、ヘッダファイル生成手段9や表示手段10から送られた関数名のベーシックオペレーションを探索し、その次のベーシックオペレーションがあるかどうか探索する。ある場合は、その関数名を行数カウント手段7へ送る。ない場合は、処理を終了する。
【0049】
本実施の形態によれば、Cソースファイルからアセンブラファイルを作成し、アセンブラファイルのベーシックオペレーションを最適化ASM文に変換してヘッダファイルを自動的に作成することができる。
【0050】
以下、規定のワード数A=5である場合の、本実施の形態のヘッダファイル生成方法を図7のフローチャートと図9のCソースファイルを用いて説明する。
【0051】
規格で公開されているベーシックオペレーションが記述されたCソースファイルbasic_op.cpp(図9)はディスク装置4に格納されている。
【0052】
先ず、コンパイラ6においてディスク装置4から、Cソースファイルbasic_op.cpp(図9(b))を主記憶装置5へ読み込む(ステップS11)。
【0053】
次に、コンパイラ6において、主記憶装置5に読み込んだCソースファイルbasic_op.cppをコンパイルし、アセンブラファイルを出力し、主記憶装置5へ格納する(ステップS12)。
【0054】
次に、行数カウント手段7において、コンパイラ6にて出力されたアセンブラファイルから、先頭のL_mult関数部分の行数をカウントし、関数名L_multとその行数Xを出力する(ステップS13)。
【0055】
次に、コード数判定手段8において、行数カウント手段7から送られた行数Xを規定のワード数「5」と比較する(ステップS14)。
【0056】
コンパイラ6にて図8(a)のようなアセンブラコードが出力される場合、X≦5となる。このような場合、単純なコンパイラで問題なく最適なコードが出力されたと考えられる。そこで、行数カウント手段7より送られたベーシックオペレーション名L_multをヘッダファイル生成手段9へ送る。
【0057】
次に、ヘッダファイル生成手段9において、主記憶装置5にあるアセンブラファイル内で、コード数判定手段8から送られたL_multという関数を探索する。そして、L_mult関数部分のアセンブラコードから、最適化ASM文を作成し、インライン関数化を施し、ヘッダファイル内へ記述し、ヘッダファイルをディスク装置4へ格納する。その後、ベーシックオペレーション探索手段11へ関数名L_multを送る(ステップS15)。
【0058】
次に、ベーシックオペレーション探索手段11において、主記憶装置5にあるアセンブラファイル内で、ヘッダファイル生成手段9より送られたL_mult関数を探索し、その次のベーシックオペレーションがあるかどうか探索する(ステップS17)。今回は、次にL_macがあるため、関数名L_macを行数カウント手段7へ送る。
【0059】
この処理をCソースファイルbasic_op.cpp内の全てのベーシックオペレーションに対して行い、ステップS17において、次の関数が見つからなくなったら終了する。
【0060】
このように、本実施の形態のヘッダファイル生成方法によれば、ソースファイル内に記述された多くのベーシックオペレーションの中から、コンパイラが最適なアセンブラコードを出力可能なものについては、ヘッダファイルを自動的に作成し、作成したヘッダファイルを上記の音声コーデック開発方法で用いるので、開発の手間を省くことができる。
【0061】
(実施の形態3)
最後に、本発明の実施の形態3のベーシックオペレーション選択方法について、規定のワード数A=5である際の動作を図7のフローチャートと図9のCソースファイルを用いて説明する。
【0062】
規格で公開されているベーシックオペレーションが記述されたCソースファイルbasic_op.cpp(図9)はディスク装置4に格納されている。
【0063】
先ず、コンパイラ6において、ディスク装置4からCソースファイルbasic_op.cpp(図9(b))を主記憶装置5へ読み込む(ステップS11)。
【0064】
次に、コンパイラ6において、主記憶装置5に読み込んだCソースファイルbasic_op.cppをコンパイルし、アセンブラファイルを出力し、主記憶装置5へ格納する(ステップS12)。
【0065】
次に、行数カウント手段7において、コンパイラ6にて出力されたアセンブラファイルから、先頭のL_mult関数部分の行数をカウントし、関数名L_multと行数Xを出力する(ステップS13)。
【0066】
次に、コード数判定手段8において、行数カウント手段7から送られる行数Xを規定のワード数「5」と比較する(ステップS14)。
【0067】
コンパイラ6にて、図8(b)に示すようなアセンブラコードが出力される場合、X>5となる。このような場合、ベーシックオペレーションL_multはコンパイラで無駄な命令が出力されたと考えられ、後に人手で最適化ASM文で記述しなければならない。そこで表示手段10へ関数名L_multを送る。
【0068】
次に、表示手段10において、コード数判定手段8より送られたベーシックオペレーションの関数名L_multを出力装置3へ出力し、画面に表示させる。その後、ベーシックオペレーション探索手段11へ関数名L_multを送る(ステップS16)。
【0069】
次に、ベーシックオペレーション探索手段11において、主記憶装置5にあるアセンブラファイル内で、表示手段10より送られたL_mult関数を探索し、その次のベーシックオペレーションがあるかどうか探索する(ステップS17)。今回は、次にL_macがあるため、関数名L_macを行数カウント手段7へ送る。
【0070】
この処理をCソースファイルbasic_op.cpp内の全てのベーシックオペレーションに対して行い、ステップS17において、次の関数が見つからなくなったら終了する。
【0071】
本実施の形態のベーシックオペレーション選択方法によれば、Cソースファイル内に記述された多くのベーシックオペレーションの中から、人手で最適化ASM文を記述しなければならないベーシックオペレーションを出力し、開発者が全てのベーシックオペレーションをチェックする手間を軽減する効果を持つ。
【産業上の利用可能性】
【0072】
本発明の技術は、ITU−T,3GPP(3rd Generation Partnership Project)等といった音声コーデックのプログラム開発において有用である。
【図面の簡単な説明】
【0073】
【図1】本発明の実施の形態1の音声コーデック開発方法におけるハードウェア構成を示すブロック図
【図2】本発明の実施の形態1の音声コーデック開発方法で用いるCソースファイルおよびヘッダファイルの具体例を示す図
【図3】本発明の実施の形態で用いる最適化ASM文の記述方法を示す図
【図4】本発明の実施の形態1の音声コーデック開発方法の動作説明に用いるフローチャート
【図5】本発明の実施の形態1の音声コーデック開発方法でコンパイルされるソースコードのイメージ図
【図6】本発明の実施の形態2におけるヘッダファイル生成方法および本発明の実施の形態3のベーシックオペレーション選択方法におけるハードウェア構成を示すブロック図
【図7】本発明の実施の形態2におけるヘッダファイル生成方法および本発明の実施の形態3のベーシックオペレーション選択方法の動作説明に用いるフローチャート
【図8】本発明の実施の形態2に関連して、コンパイラより出力されるアセンブラコードの違いを示す図
【図9】規格で公開されているCソースコードの一例を示す図
【図10】従来の音声コーデック開発方法の動作を示すフローチャート
【図11】従来の音声コーデック開発方法で用いるCソースコードの具体例を示す図
【図12】音声コーデックプログラムが動くプロセッサの命令一覧を示す図
【符号の説明】
【0074】
1 中央処理装置(CPU)
2 データ入出力システム
3 出力装置
4 ディスク装置
5 主記憶装置
6 コンパイラ
7 行数カウント手段
8 コード数判定手段
9 ヘッダファイル生成手段
10 表示手段
11 ベーシックオペレーション探索手段
【技術分野】
【0001】
本発明は、ITU等で規格化されたベーシックオペレーションによって記述される音声コーデックの開発方法ならびにその関連技術に関するものである。
【背景技術】
【0002】
ITU(International Telecommunication Union:国際電気通信連合)で規格化されCソースコードで記述された音声コーデックは公開されている。この音声コーデックの処理は、ベーシックオペレーションという音声コーデック特有の演算を含んでいる。一般に、ベーシックオペレーションにはオーバーフロー補正付き、固定小数点位置、ビット精度といった演算が処理フローとして含まれており、現状のコンパイラではそのままコンパイルしても、高い処理性能は期待できない場合が多い。
【0003】
図9に公開されている規格の例を示す。図9(a)のresidu.cppは音声コーデック処理の一部を抜き出したもので、フィルター演算を行う部分である。この中のL_multやL_macが、ベーシックオペレーションである。図9(b)のbasic_op.cppは規格で公開されたベーシックオペレーションの一例であり、C言語で記述されている。これらL_multとL_macは、それぞれオーバーフロー補正付きの積算、積和演算を行うものであり、上記のようにこのままコンパイルしても、高い処理性能は期待できない。
【0004】
そのため、従来の音声コーデック開発では、このようなベーシックオペレーションだけは、規格で公開されたCソースコードを参考にアセンブラ言語で開発を行っている。逆に、単純にコンパイルして問題のない音声コーデック部は、公開されているCソースコードを基本的に、そのまま用いている。音声コーデック部の中でベーシックオペレーションを使用したいときは、関数呼び出しという方法によりアセンブラで書かれた命令を呼び出す。
【0005】
図10は従来の音声コーデック開発方法のフローチャートである。図10のフローチャートに示すように、先ずベーシックオペレーションが記述されたアセンブラファイルを読み込む(ステップS21)。このアセンブラファイルには、規格のCソースコードを参考にして、ベーシックオペレーションがアセンブラ言語で記述されている。次に、Cソースファイルを読み込む(ステップS22)。ステップS22のCソースファイルは音声コーデック部であり、規格のCソースコードをそのまま用いる。次に、ステップS21で読み込んだアセンブラファイルをアセンブルし、コンピュータで実行可能な形式へとオブジェクト化する(ステップS23)。同様にステップS22で読み込んだCソースファイルをコンパイルし、オブジェクト化する(ステップS24)。そして、ステップS23,S24で作成したオブジェクトをリンカによってリンクして実行体を生成する(ステップS25)。
【0006】
この従来の音声コーデック開発方法では、単純なコンパイルでは最適なコードを出力できない部分であるベーシックオペレーションのみをアセンブラで直接記述して、処理性能の低下を防いでいる。それ以外の単純なコンパイルで問題のない部分については、規格により提供されているCソースコードをそのまま用いる。
【0007】
図11は従来の音声コーデック開発方法で用いたCソースファイルとアセンブラファイルの具体例である。図11(a)のresidu.cppは音声コーデック部であり、基本的に規格のCソースコード(図9(a))をそのまま用いているが、アセンブラ命令_L_mult、_L_macを関数呼び出しするように変更されている。図11(b)のbasic_op.asmでは、関数L_mult、L_macの処理内容がアセンブラで記述されている。
【0008】
音声コーデックのプログラムが動くプロセッサの命令の一覧を図12に示す。図12のように、basic_op.asm内で使用されているfmul、fmacはそれぞれオーバーフロー補正付きの積算、積和演算を行うアセンブラ命令であり、図9(b)の規格のベーシックオペレーションのCソースコードと同等の処理を1命令で行うことができる。このresidu.cppとbasic_op.asmそれぞれをオブジェクト化しリンクすることで、実行体が作成される。
【特許文献1】特開平3−105626号公報(第2−3頁、第1図)
【発明の開示】
【発明が解決しようとする課題】
【0009】
従来の開発方法は、上記のように音声コーデック部からベーシックオペレーションを関数呼び出しという形で呼び出している。一般に関数呼び出しをするためには、アセンブラ上で“call”という1命令が必要となる。しかし、音声のベーシックオペレーションは、図12のfmul、fmacのようなアセンブラ1命令で記述可能な場合が多い。元々1命令で記述可能な関数を呼び出すのに、callという1命令を必要としており、コードサイズを増加させているという問題があった。
【0010】
さらに、アセンブラで記述されたベーシックオペレーションと、C言語等高級言語で記述された音声コーデック部とを別々にオブジェクト化しているため、コンパイラによるベーシックオペレーションの呼び出し前後を考慮した最適化(例:レジスタ割付、冗長除去等)が適用されないという課題もある。
【0011】
本発明は、上記課題を解決するためになされたものであり、コードサイズをよりコンパクトに、かつコンパイラによるベーシックオペレーション呼び出し前後を考慮した最適化を可能にする音声コーデック開発方法の提供を第一の目的とする。
【0012】
また、従来方法ではベーシックオペレーションの全てを人手でアセンブラ化していた。しかしながら、コンパイラの性能により、ベーシックオペレーションの中には単純なコンパイルで最適なコードを出力できるものがある。そこで、全てのベーシックオペレーションについてコンパイルで問題なく最適なコードが出力されるかどうかを判定し、最適なアセンブラコードが出力されるベーシックオペレーションは、コンピュータによって最適化ASM文で作成し、ヘッダファイルへ記述するヘッダファイル生成方法の提供を第二の目的とする。ここで、最適化ASM文とは、C言語等高級言語の中でアセンブラ命令で記述された文であり、コンパイラによる最適化が可能な文である。
【0013】
また、一部のベーシックオペレーションはコンピュータにより自動で規格のCソースから、本発明の音声コーデック開発方法で用いるヘッダファイル内へ記述できるが、コンパイラによって最適なアセンブラコードが出力されないベーシックオペレーションは人手でヘッダファイル内に記述しなければならない。そのため、人手で記述すべきベーシックオペレーションを選択するベーシックオペレーション選択方法の提供を第三の目的とする。
【課題を解決するための手段】
【0014】
上記第一の目的を達成するため、本発明の音声コーデック開発方法は、
ソースファイルを読み込む第1のステップと、
読み込んだ前記ソースファイル内でインクルードされているヘッダファイルを読み込む第2のステップと、
前記ソースファイルと前記ヘッダファイルをコンパイルする第3のステップ
とを含む音声コーデック開発方法において、
前記第2のステップの前記ヘッダファイルでベーシックオペレーションがインライン関数として宣言され、かつ処理内容がアセンブラ記述で書かれており、
前記第1のステップの前記ソースファイルでは前記ベーシックオペレーションを使った処理が記述され、かつ前記ヘッダファイルをインクルード(取り込み指示)していることを特徴とするものである。
【0015】
別言すれば、本発明による音声コーデック開発方法は、
ベーシックオペレーションがインライン関数として宣言され、かつ処理内容がアセンブラ記述で書かれているヘッダファイルと、前記ベーシックオペレーションを使った処理が記述され、かつ前記ヘッダファイルをインクルードしているソースファイルとを対象として、
前記ソースファイルを読み込む第1のステップと、
前記読み込んだ前記ソースファイル内でインクルードされているヘッダファイルを読み込む第2のステップと、
前記ソースファイルと前記ヘッダファイルをコンパイルする第3のステップ
とを含むものである。
【0016】
すなわち、本発明の音声コーデック開発方法は、ベーシックオペレーションをインライン展開することを特徴としている。一般にインライン展開は、展開先で関数の中身を貼り付ける形となるため、関数の中身が長いとコードサイズは増加してしまう。しかし、音声コーデックのベーシックオペレーションに限ればアセンブラ1命令で記述できることが多いため、インライン展開すれば関数の呼び出し命令や戻り命令が必要なくなるという利点がある。これは、コードサイズの削減という効果に繋がる。また、ベーシックオペレーションのインライン展開先で、コンパイラによる関数呼び出し前後を考慮した最適化(命令並び替え、冗長除去、レジスタ割付等)を適用可能にする。
【0017】
本発明の音声コーデックプログラムは、コードサイズの削減により使用メモリサイズの削減に有利であるとともに、最適化による実行速度の高速化に有利である。
【0018】
また、上記第二の目的を達成するため、本発明のヘッダファイル生成方法は、コンピュータによりベーシックオペレーションを記述したヘッダファイルを生成する方法であって、
規格で公開されたベーシックオペレーションが記述されたソースファイルを読み込む第1のステップと、
前記ソースファイルをコンパイルしてアセンブラファイルを生成する第2のステップと、
前記アセンブラファイルに記述された前記ベーシックオペレーションの行数を計測する第3のステップと、
前記第3のステップで計測した行数と規定のワード数とを比較する第4のステップと、
前記計測した行数が前記規定のワード数以下のときに、前記アセンブラファイルに基づいてヘッダファイルを生成する第5のステップ
とを含むヘッダファイル生成方法であって、
前記第5のステップで作成する前記ヘッダファイルでは、前記ベーシックオペレーションがインライン関数として宣言され、かつ処理内容がアセンブラ記述(最適化ASM文)されていることを特徴とするものである。
【0019】
別言すれば、本発明のヘッダファイル生成方法は、
規格で公開されたベーシックオペレーションが記述されたソースファイルを読み込む第1のステップと、
前記ソースファイルをコンパイルしてアセンブラファイルを生成する第2のステップと、
前記アセンブラファイルに記述された前記ベーシックオペレーションの行数を計測する第3のステップと、
前記第3のステップで計測した行数と規定のワード数とを比較する第4のステップと、
前記計測した行数が前記規定のワード数以下のときに、前記アセンブラファイルに基づいて、前記ベーシックオペレーションがインライン関数として宣言され、かつ処理内容がアセンブラ記述された状態のヘッダファイルを生成する第5のステップ
とを含むことを特徴とするものである。
【0020】
ソースファイル内に記述された多くのベーシックオペレーションの中から、コンパイラが最適なアセンブラコードを出力可能なもの(計測行数が規定ワード数以下)については、コンピュータによってヘッダファイルを自動的に作成するので、開発の手間を省く上で有効である。
【0021】
また、上記第三の目的を達成するため、本発明のベーシックオペレーション選択方法は、人手で開発しなければならないベーシックオペレーションを選択し、画面表示等する方法であって、
規格で公開されたベーシックオペレーションが記述されたソースファイルを読み込む第1のステップと、
前記ソースファイルをコンパイルしアセンブラファイルを生成する第2のステップと、
前記アセンブラファイルに記述された前記ベーシックオペレーションの行数を計測する第3のステップと、
前記第3のステップで計測した行数と規定のワード数とを比較する第4のステップと、
前記計測した行数が前記規定のワード数を超えるときに、前記第3のステップで行数を計測した前記ベーシックオペレーションの関数名を出力(画面表示等)する第5のステップ
とを含むことを特徴とするものである。
【0022】
これによれば、ソースファイル内に記述された多くのベーシックオペレーションの中から、人手のアセンブラ記述を要するベーシックオペレーションを自動的にリストアップすることができる。
【0023】
本発明の音声コーデックプログラムは、上記の音声コーデック開発方法により作成されたものである。
【発明の効果】
【0024】
本発明の音声コーデック開発方法によれば、ベーシックオペレーションをインライン展開して関数の呼び出し命令や戻り命令を不要化するので、コードサイズを削減できるとともに、インライン展開先でコンパイラによる関数呼び出し前後を考慮した最適化(命令並び替え、冗長除去、レジスタ割付等)を実現できる。
【0025】
本発明の音声コーデック開発方法によって作成されたコンピュータ実行可能なプログラムは、コードサイズの減少による使用メモリサイズの減少および、コンパイラによる最適化によって実行速度の向上という効果を持つ。
【0026】
本発明のヘッダファイル生成方法は、Cソース内に記述された多くのベーシックオペレーションの中から、コンパイラが最適なアセンブラコードを出力可能なものはコンピュータによってヘッダファイルの作成を行い、開発の手間を省く効果を持つ。
【0027】
本発明のベーシックオペレーション選択方法は、Cソース内に記述された多くのベーシックオペレーションの中から、人手で最適化ASM文を記述しなければならないベーシックオペレーションをリストアップし、開発者が全てのベーシックオペレーションをチェックする手間を軽減する効果を持つ。
【発明を実施するための最良の形態】
【0028】
以下、本発明にかかわる音声コーデック開発方法の実施の形態を図面に基づいて詳細に説明する。
【0029】
(実施の形態1)
図1は、本発明の実施の形態1の音声コーデック開発方法におけるハードウェア構成を示すブロック図である。本実施の形態の音声コーデック開発方法で使用するハードウェアシステムは、図1のように、中央処理装置(CPU)1と、データの格納を行うデータ入出力システム2とから構成されている。
【0030】
ここで、データ入出力システム2はディスク装置4と主記憶装置5とから構成されている。ディスク装置4には、音声コーデック処理が記述されたCソースファイル、ベーシックオペレーションが最適化ASM文として記述されたヘッダファイルと、コンパイラ6によって作成された実行体(実行可能プログラム)が格納される。主記憶装置5はディスク装置4の制御プログラム等が記憶される。
【0031】
また、中央処理装置1は、コンパイラ6から構成されている。コンパイラ6は、ディスク装置4にあるソースファイル、ヘッダファイルを主記憶装置5へ読み込み、オブジェクト化する。さらに、作成したオブジェクトをリンクし実行体にして、ディスク装置4に格納する。
【0032】
図2はディスク装置4に格納されるソースファイル、ヘッダファイルの具体例である。図2(a)のresidu.cppは、従来方法(図11(a))と同様、規格で公開されているCソースコード(図9(a))をそのまま使用しているが、ベーシックオペレーションが記述されたヘッダファイル(basic_op.h)をインクルードする命令が付け加えられている。図2(b)のbasic_op.hはインクルードされるヘッダファイルである。図2(b)のように、ベーシックオペレーション関数L_mult、L_macがそれぞれインライン(inlinec)宣言され、かつ最適化ASM文で処理内容が記述されている。
【0033】
図3に、本発明の実施の形態で用いる最適化ASM文の記述方法について示す。図3において、ロード式とはレジスタにC言語の変数や四則演算などの式の結果を格納する式であり、ストア式とはレジスタの値をC言語の変数等に格納する式であり、命令指定部とはアセンブラ命令を記述する場所である。
【0034】
以下、本実施の形態の音声コーデック開発方法の動作例を図4のフローチャートを用いて説明する。
【0035】
図2に示したソースファイルresidu.cpp、ヘッダファイルbasic_op.hはディスク装置4に格納されている。
【0036】
先ず、コンパイラ6において、ディスク装置4にあるソースファイルresidu.cppを主記憶装置5へ読み込む(ステップS1)。
【0037】
次に、コンパイラ6において、ステップS1で読み込んだソースファイルresidu.cpp内でインクルードされているヘッダファイルbasic_op.hを、ディスク装置4から主記憶装置5へ読み込む(ステップS2)。
【0038】
次に、コンパイラ6において主記憶装置5に読み込んだソースファイルresidu.cppとヘッダファイルbasic_op.hをコンパイルしてオブジェクト化する。そして、両オブジェクトをリンクして実行体を作成し、ディスク装置4へ格納する(ステップS3)。
【0039】
ソースファイルresidu.cppでは、ヘッダファイルbasic_op.hがインクルードされ、且つインライン関数L_multやL_macは関数呼び出しされる場所に埋め込まれる。そのため、実際にコンパイルするソースコードは図5のようになる。したがって、ステップS3では図5のCソースファイルをコンパイルしていることと同じである。
【0040】
本実施の形態の音声コーデック開発方法によれば、ベーシックオペレーション呼び出し前後を考慮した最適化(命令並び替え、冗長除去、レジスタ割付等)が適用され、且つ関数の呼び出し命令を削減することにより、コードサイズの削減を実現することができる。
【0041】
(実施の形態2)
次に、本発明の実施の形態2のヘッダファイル生成方法におけるハードウェア構成のブロック図を図6に示す。この図6は、本発明の実施の形態3のベーシックオペレーション選択方法にも適用されるものである。図1と同様、中央処理装置(CPU)1と、データの格納と入出力を行うデータ入出力システム2とから構成されている。
【0042】
ここで、データ入出力システム2は、出力装置3とディスク装置4と主記憶装置5とから構成されている。出力装置3は、ディスプレイ等の必要なデータを表示するため装置である。ディスク装置4には、規格で公開されているベーシックオペレーションが記述されたCソースファイルが格納されている。主記憶装置5は、これら出力装置3、ディスク装置4の制御プログラム等を記憶する。また、中央処理装置1は、コンパイラ6、行数カウント手段7、コード数判定手段8、ヘッダファイル生成手段9、表示手段10およびベーシックオペレーション探索手段11から構成されている。
【0043】
コンパイラ6は、ディスク装置4に格納されているベーシックオペレーションが記述されたCソースファイルを主記憶装置5へ読み込み、アセンブラファイル化する。その後、出力したアセンブラファイルを主記憶装置5へ格納する。
【0044】
行数カウント手段7は、コンパイラ6によって出力された主記憶装置5上のアセンブラファイルの中で、先頭のベーシックオペレーション、またはベーシックオペレーション探索手段11より送られた関数名のベーシックオペレーションの行数をカウントし、その関数名と行数Xをコード数判定手段8へ送る。
【0045】
コード数判定手段8は、行数カウント手段7から送られてきた行数Xと規定のワード数Aとの大小関係を判定する。X>Aならば、行数カウント手段7から送られたベーシックオペレーションの関数名を表示手段10へ送る。X≦Aならば、行数カウント手段7から送られたベーシックオペレーションの関数名をヘッダファイル生成手段9へ送る。
【0046】
ヘッダファイル生成手段9は、主記憶装置5にあるアセンブラファイルから、コード数判定手段8より送られた関数名のベーシックオペレーションを探索する。次に、そのベーシックオペレーションを最適化ASM文に変換し、インライン関数化を施し、Cヘッダファイル内に記述し、そのヘッダファイルをディスク装置4へ格納する。最後に、その関数名をベーシックオペレーション探索手段11へ送る。
【0047】
表示手段10は、コード数判定手段8より送られた関数名を出力装置3へ渡し、表示する。その後、その関数名をベーシックオペレーション探索手段11へ送る。
【0048】
ベーシックオペレーション探索手段11は、主記憶装置5にあるアセンブラファイルから、ヘッダファイル生成手段9や表示手段10から送られた関数名のベーシックオペレーションを探索し、その次のベーシックオペレーションがあるかどうか探索する。ある場合は、その関数名を行数カウント手段7へ送る。ない場合は、処理を終了する。
【0049】
本実施の形態によれば、Cソースファイルからアセンブラファイルを作成し、アセンブラファイルのベーシックオペレーションを最適化ASM文に変換してヘッダファイルを自動的に作成することができる。
【0050】
以下、規定のワード数A=5である場合の、本実施の形態のヘッダファイル生成方法を図7のフローチャートと図9のCソースファイルを用いて説明する。
【0051】
規格で公開されているベーシックオペレーションが記述されたCソースファイルbasic_op.cpp(図9)はディスク装置4に格納されている。
【0052】
先ず、コンパイラ6においてディスク装置4から、Cソースファイルbasic_op.cpp(図9(b))を主記憶装置5へ読み込む(ステップS11)。
【0053】
次に、コンパイラ6において、主記憶装置5に読み込んだCソースファイルbasic_op.cppをコンパイルし、アセンブラファイルを出力し、主記憶装置5へ格納する(ステップS12)。
【0054】
次に、行数カウント手段7において、コンパイラ6にて出力されたアセンブラファイルから、先頭のL_mult関数部分の行数をカウントし、関数名L_multとその行数Xを出力する(ステップS13)。
【0055】
次に、コード数判定手段8において、行数カウント手段7から送られた行数Xを規定のワード数「5」と比較する(ステップS14)。
【0056】
コンパイラ6にて図8(a)のようなアセンブラコードが出力される場合、X≦5となる。このような場合、単純なコンパイラで問題なく最適なコードが出力されたと考えられる。そこで、行数カウント手段7より送られたベーシックオペレーション名L_multをヘッダファイル生成手段9へ送る。
【0057】
次に、ヘッダファイル生成手段9において、主記憶装置5にあるアセンブラファイル内で、コード数判定手段8から送られたL_multという関数を探索する。そして、L_mult関数部分のアセンブラコードから、最適化ASM文を作成し、インライン関数化を施し、ヘッダファイル内へ記述し、ヘッダファイルをディスク装置4へ格納する。その後、ベーシックオペレーション探索手段11へ関数名L_multを送る(ステップS15)。
【0058】
次に、ベーシックオペレーション探索手段11において、主記憶装置5にあるアセンブラファイル内で、ヘッダファイル生成手段9より送られたL_mult関数を探索し、その次のベーシックオペレーションがあるかどうか探索する(ステップS17)。今回は、次にL_macがあるため、関数名L_macを行数カウント手段7へ送る。
【0059】
この処理をCソースファイルbasic_op.cpp内の全てのベーシックオペレーションに対して行い、ステップS17において、次の関数が見つからなくなったら終了する。
【0060】
このように、本実施の形態のヘッダファイル生成方法によれば、ソースファイル内に記述された多くのベーシックオペレーションの中から、コンパイラが最適なアセンブラコードを出力可能なものについては、ヘッダファイルを自動的に作成し、作成したヘッダファイルを上記の音声コーデック開発方法で用いるので、開発の手間を省くことができる。
【0061】
(実施の形態3)
最後に、本発明の実施の形態3のベーシックオペレーション選択方法について、規定のワード数A=5である際の動作を図7のフローチャートと図9のCソースファイルを用いて説明する。
【0062】
規格で公開されているベーシックオペレーションが記述されたCソースファイルbasic_op.cpp(図9)はディスク装置4に格納されている。
【0063】
先ず、コンパイラ6において、ディスク装置4からCソースファイルbasic_op.cpp(図9(b))を主記憶装置5へ読み込む(ステップS11)。
【0064】
次に、コンパイラ6において、主記憶装置5に読み込んだCソースファイルbasic_op.cppをコンパイルし、アセンブラファイルを出力し、主記憶装置5へ格納する(ステップS12)。
【0065】
次に、行数カウント手段7において、コンパイラ6にて出力されたアセンブラファイルから、先頭のL_mult関数部分の行数をカウントし、関数名L_multと行数Xを出力する(ステップS13)。
【0066】
次に、コード数判定手段8において、行数カウント手段7から送られる行数Xを規定のワード数「5」と比較する(ステップS14)。
【0067】
コンパイラ6にて、図8(b)に示すようなアセンブラコードが出力される場合、X>5となる。このような場合、ベーシックオペレーションL_multはコンパイラで無駄な命令が出力されたと考えられ、後に人手で最適化ASM文で記述しなければならない。そこで表示手段10へ関数名L_multを送る。
【0068】
次に、表示手段10において、コード数判定手段8より送られたベーシックオペレーションの関数名L_multを出力装置3へ出力し、画面に表示させる。その後、ベーシックオペレーション探索手段11へ関数名L_multを送る(ステップS16)。
【0069】
次に、ベーシックオペレーション探索手段11において、主記憶装置5にあるアセンブラファイル内で、表示手段10より送られたL_mult関数を探索し、その次のベーシックオペレーションがあるかどうか探索する(ステップS17)。今回は、次にL_macがあるため、関数名L_macを行数カウント手段7へ送る。
【0070】
この処理をCソースファイルbasic_op.cpp内の全てのベーシックオペレーションに対して行い、ステップS17において、次の関数が見つからなくなったら終了する。
【0071】
本実施の形態のベーシックオペレーション選択方法によれば、Cソースファイル内に記述された多くのベーシックオペレーションの中から、人手で最適化ASM文を記述しなければならないベーシックオペレーションを出力し、開発者が全てのベーシックオペレーションをチェックする手間を軽減する効果を持つ。
【産業上の利用可能性】
【0072】
本発明の技術は、ITU−T,3GPP(3rd Generation Partnership Project)等といった音声コーデックのプログラム開発において有用である。
【図面の簡単な説明】
【0073】
【図1】本発明の実施の形態1の音声コーデック開発方法におけるハードウェア構成を示すブロック図
【図2】本発明の実施の形態1の音声コーデック開発方法で用いるCソースファイルおよびヘッダファイルの具体例を示す図
【図3】本発明の実施の形態で用いる最適化ASM文の記述方法を示す図
【図4】本発明の実施の形態1の音声コーデック開発方法の動作説明に用いるフローチャート
【図5】本発明の実施の形態1の音声コーデック開発方法でコンパイルされるソースコードのイメージ図
【図6】本発明の実施の形態2におけるヘッダファイル生成方法および本発明の実施の形態3のベーシックオペレーション選択方法におけるハードウェア構成を示すブロック図
【図7】本発明の実施の形態2におけるヘッダファイル生成方法および本発明の実施の形態3のベーシックオペレーション選択方法の動作説明に用いるフローチャート
【図8】本発明の実施の形態2に関連して、コンパイラより出力されるアセンブラコードの違いを示す図
【図9】規格で公開されているCソースコードの一例を示す図
【図10】従来の音声コーデック開発方法の動作を示すフローチャート
【図11】従来の音声コーデック開発方法で用いるCソースコードの具体例を示す図
【図12】音声コーデックプログラムが動くプロセッサの命令一覧を示す図
【符号の説明】
【0074】
1 中央処理装置(CPU)
2 データ入出力システム
3 出力装置
4 ディスク装置
5 主記憶装置
6 コンパイラ
7 行数カウント手段
8 コード数判定手段
9 ヘッダファイル生成手段
10 表示手段
11 ベーシックオペレーション探索手段
【特許請求の範囲】
【請求項1】
ソースファイルを読み込む第1のステップと、
読み込んだ前記ソースファイル内でインクルードされているヘッダファイルを読み込む第2のステップと、
前記ソースファイルと前記ヘッダファイルをコンパイルする第3のステップ
とを含む音声コーデック開発方法において、
前記第2のステップの前記ヘッダファイルでベーシックオペレーションがインライン関数として宣言され、かつ処理内容がアセンブラ記述で書かれており、
前記第1のステップの前記ソースファイルでは前記ベーシックオペレーションを使った処理が記述され、かつ前記ヘッダファイルをインクルードしている
ことを特徴とする音声コーデック開発方法。
【請求項2】
ベーシックオペレーションがインライン関数として宣言され、かつ処理内容がアセンブラ記述で書かれているヘッダファイルと、前記ベーシックオペレーションを使った処理が記述され、かつ前記ヘッダファイルをインクルードしているソースファイルとを対象として、
前記ソースファイルを読み込む第1のステップと、
前記読み込んだ前記ソースファイル内でインクルードされているヘッダファイルを読み込む第2のステップと、
前記ソースファイルと前記ヘッダファイルをコンパイルする第3のステップ
とを含む音声コーデック開発方法。
【請求項3】
規格で公開されたベーシックオペレーションが記述されたソースファイルを読み込む第1のステップと、
前記ソースファイルをコンパイルしてアセンブラファイルを生成する第2のステップと、
前記アセンブラファイルに記述された前記ベーシックオペレーションの行数を計測する第3のステップと、
前記第3のステップで計測した行数と規定のワード数とを比較する第4のステップと、
前記計測した行数が前記規定のワード数以下のときに、前記アセンブラファイルに基づいてヘッダファイルを生成する第5のステップ
とを含むヘッダファイル生成方法であって、
前記第5のステップで作成する前記ヘッダファイルでは、前記ベーシックオペレーションがインライン関数として宣言され、かつ処理内容がアセンブラ記述されていることを特徴とするヘッダファイル生成方法。
【請求項4】
規格で公開されたベーシックオペレーションが記述されたソースファイルを読み込む第1のステップと、
前記ソースファイルをコンパイルしてアセンブラファイルを生成する第2のステップと、
前記アセンブラファイルに記述された前記ベーシックオペレーションの行数を計測する第3のステップと、
前記第3のステップで計測した行数と規定のワード数とを比較する第4のステップと、
前記計測した行数が前記規定のワード数以下のときに、前記アセンブラファイルに基づいて、前記ベーシックオペレーションがインライン関数として宣言され、かつ処理内容がアセンブラ記述された状態のヘッダファイルを生成する第5のステップ
とを含むことを特徴とするヘッダファイル生成方法。
【請求項5】
規格で公開されたベーシックオペレーションが記述されたソースファイルを読み込む第1のステップと、
前記ソースファイルをコンパイルしアセンブラファイルを生成する第2のステップと、
前記アセンブラファイルに記述された前記ベーシックオペレーションの行数を計測する第3のステップと、
前記第3のステップで計測した行数と規定のワード数とを比較する第4のステップと、
前記計測した行数が前記規定のワード数を超えるときに、前記第3のステップで行数を計測した前記ベーシックオペレーションの関数名を出力する第5のステップ
とを含むことを特徴とするベーシックオペレーション選択方法。
【請求項6】
請求項1または請求項2に記載の音声コーデック開発方法により作成された、コンピュータ実行可能な音声コーデックプログラム。
【請求項1】
ソースファイルを読み込む第1のステップと、
読み込んだ前記ソースファイル内でインクルードされているヘッダファイルを読み込む第2のステップと、
前記ソースファイルと前記ヘッダファイルをコンパイルする第3のステップ
とを含む音声コーデック開発方法において、
前記第2のステップの前記ヘッダファイルでベーシックオペレーションがインライン関数として宣言され、かつ処理内容がアセンブラ記述で書かれており、
前記第1のステップの前記ソースファイルでは前記ベーシックオペレーションを使った処理が記述され、かつ前記ヘッダファイルをインクルードしている
ことを特徴とする音声コーデック開発方法。
【請求項2】
ベーシックオペレーションがインライン関数として宣言され、かつ処理内容がアセンブラ記述で書かれているヘッダファイルと、前記ベーシックオペレーションを使った処理が記述され、かつ前記ヘッダファイルをインクルードしているソースファイルとを対象として、
前記ソースファイルを読み込む第1のステップと、
前記読み込んだ前記ソースファイル内でインクルードされているヘッダファイルを読み込む第2のステップと、
前記ソースファイルと前記ヘッダファイルをコンパイルする第3のステップ
とを含む音声コーデック開発方法。
【請求項3】
規格で公開されたベーシックオペレーションが記述されたソースファイルを読み込む第1のステップと、
前記ソースファイルをコンパイルしてアセンブラファイルを生成する第2のステップと、
前記アセンブラファイルに記述された前記ベーシックオペレーションの行数を計測する第3のステップと、
前記第3のステップで計測した行数と規定のワード数とを比較する第4のステップと、
前記計測した行数が前記規定のワード数以下のときに、前記アセンブラファイルに基づいてヘッダファイルを生成する第5のステップ
とを含むヘッダファイル生成方法であって、
前記第5のステップで作成する前記ヘッダファイルでは、前記ベーシックオペレーションがインライン関数として宣言され、かつ処理内容がアセンブラ記述されていることを特徴とするヘッダファイル生成方法。
【請求項4】
規格で公開されたベーシックオペレーションが記述されたソースファイルを読み込む第1のステップと、
前記ソースファイルをコンパイルしてアセンブラファイルを生成する第2のステップと、
前記アセンブラファイルに記述された前記ベーシックオペレーションの行数を計測する第3のステップと、
前記第3のステップで計測した行数と規定のワード数とを比較する第4のステップと、
前記計測した行数が前記規定のワード数以下のときに、前記アセンブラファイルに基づいて、前記ベーシックオペレーションがインライン関数として宣言され、かつ処理内容がアセンブラ記述された状態のヘッダファイルを生成する第5のステップ
とを含むことを特徴とするヘッダファイル生成方法。
【請求項5】
規格で公開されたベーシックオペレーションが記述されたソースファイルを読み込む第1のステップと、
前記ソースファイルをコンパイルしアセンブラファイルを生成する第2のステップと、
前記アセンブラファイルに記述された前記ベーシックオペレーションの行数を計測する第3のステップと、
前記第3のステップで計測した行数と規定のワード数とを比較する第4のステップと、
前記計測した行数が前記規定のワード数を超えるときに、前記第3のステップで行数を計測した前記ベーシックオペレーションの関数名を出力する第5のステップ
とを含むことを特徴とするベーシックオペレーション選択方法。
【請求項6】
請求項1または請求項2に記載の音声コーデック開発方法により作成された、コンピュータ実行可能な音声コーデックプログラム。
【図1】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【公開番号】特開2006−23795(P2006−23795A)
【公開日】平成18年1月26日(2006.1.26)
【国際特許分類】
【出願番号】特願2004−198839(P2004−198839)
【出願日】平成16年7月6日(2004.7.6)
【出願人】(000005821)松下電器産業株式会社 (73,050)
【Fターム(参考)】
【公開日】平成18年1月26日(2006.1.26)
【国際特許分類】
【出願日】平成16年7月6日(2004.7.6)
【出願人】(000005821)松下電器産業株式会社 (73,050)
【Fターム(参考)】
[ Back to top ]