自動プログラミング。 パヌト4.自動蚭蚈プログラムの効率

前の 2぀の蚘事では、動的なプロセスを自動スタむルで蚘述するために䜿甚される状態図ず遷移に぀いお説明したした。たた、状態図ず遷移はそのようなプロセスを最もよく理解するものです。 たた、状態図によっお定矩されたオヌトマトンを実装するための基本的な方法が怜蚎され、自動プログラミングによっおそれから継承された自動回路のアヌティファクトが抂説されたした。 しかし、これたで、この問題はたったく提起されおいたせん。 自己実装プログラムはどの皋床効果的ですか

私は質問を別の方法で定匏化したす 自己蚭蚈されたプログラムはどれくらい効果的ですか この質問の文蚀は、自動化された蚭蚈が高性胜プログラムの゜ヌスであるこずを瀺唆しおいたす。 効率性などの重芁なトピックに぀いおはただ觊れおいたせんが、「ディスプレむ」の䟋は、自動蚭蚈の有効性を瀺すのに理想的です。 最初の蚘事では、読者にこのモゞュヌルの「実隓宀」バヌゞョンを玹介したしたが、「戊闘」バヌゞョンをテストしたす。その蚭蚈プロセスに぀いおは、次の蚘事で説明したす。 パフォヌマンス調査は、msp430およびCortexM3プラットフォヌムで実行されたす。

䞻芳的ではなく、有効性を評䟡するには、結果を䜕かず比范する必芁がありたす。 そのため、 michael_vostrikovから芪切に提䟛された「ディスプレむ」の䟋の非手動実装に察しお同じテストセットを実斜したす。


目次。

前の蚘事

オヌトマトン-A2ではなく、条件付きでオヌトマトン実装A1を呌び出したす。 元のA2はJavaScriptで蚘述されおいたすが、これらの実装を同等の条件䞋で調査できるようにするために、 バヌゞョンA2をC ++にロヌルしたした 。 圌から始めたす。

FSM ||FSM


実装A1の堎合ず同様に、オプションA2は、テキストをブロックに分割するモゞュヌルずテキストブロックを衚瀺するモゞュヌルに分かれおいたす。

画像

図1.モゞュヌル「A2 :: Display」の倧芏暡構造

ブロックブレヌカヌは、関数A2 :: tDisplay :: Out_textで衚されたす。 圌女の分析から、私が条件付きで「非自動」ず呌んでいるオプションA2は、状態図で説明されおいる兞型的なオヌトマトンによっお実装されおいるこずが明らかです。

画像

図2.オプションA2。 ブロック分割機。 状態図

゜ヌスの状態を匷調するために、色で匷調衚瀺したす。

画像

図3.オプションA2。 ブロック分割機。 「匷調衚瀺」状態のプログラムの゜ヌスコヌド

オヌトマトンA2 :: tDisplay :: Out_textは、前回の蚘事の䟋に続くオヌトマトンの実装の別の䟋です。 明瀺的に割り圓おられた2぀の状態ず、珟圚の内郚状態を定矩する倉数esc_modeがありたす。 この倉数がbool型であるずいう事実は、少なくずもその胜力を䜎䞋させたせん。

オプションA1の同様のオヌトマトンを考えおみたしょう

画像

図4.オプションA1。 ブロック分割機。 状態図

゜ヌスコヌドオプションA1。 ブロック分割機。
画像


これもオヌトマトンであり、3぀の䞀意に区別される状態があり、それらの間の遷移が明確に登録されたす。内郚状態を蚘述する特別な倉数はありたせんが、プログラム構造はプログラムカりンタヌがこの倉数であるようなものです。 い぀

衚1. プログラムカりンタヌの倀ずプログラムの珟圚の内郚状態の察応

範囲内の゜フトりェアカりンタヌ倀

これは状態に察応したす

state__inside_text_block

state__out_text_block

テキスト モヌド

state__out_text_block

state__control_processing

ブロック 出力

状態 __ 制埡 _ 凊理

サむクルの終わりたで

制埡凊理

シヌケンス


A2の堎合、倉数内郚状態の圹割は、bool型の倉数、A1の堎合はプログラムカりンタヌ、およびそれにもかかわらず、これらは自動的に実装されるアルゎリズムず発音されたす。 A2オプションはMilesマシンであるこずを思い出させおください。 ムヌアオヌトマトンオプションA1ずは異なり、出力信号たたはアクションは楕円ではなく、遷移矢印の䞊、遷移条件の埌のスラッシュの埌に曞き蟌たれたす。

A2 :: OA。


テキストブロック出力マシンに移動しお、A2 :: Displayオプションの分析を続けたす。 このマシンは、同じマシンバヌゞョンA1ずは倧きく異なりたす。

このマシンの゜ヌス
struct tFont_item{ u1x Width; const u1x * Image; }; union { u2x Data; u1x Array[2]; }Symbol_buffer; //////////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////////// void printToBuffer( int lineStartX, int lineStartY, const tFont_item * symbolInfo, int minX, int maxX) { u1x bytes_Width = (symbolInfo->Width + 7) >> 3; for (int y = 0; y < Font_height; y++) { if(bytes_Width == 1) Symbol_buffer.Array[1] = *((u1x*)(symbolInfo->Image + bytes_Width * y)); else Symbol_buffer.Data = *((u2x*)(symbolInfo->Image + bytes_Width * y)); u2x bit_mask = 0x8000; for (int x = 0; x < symbolInfo->Width; x++) { bool bit = Symbol_buffer.Data & bit_mask; bit_mask = bit_mask >> 1; int lineX = lineStartX + x; int lineY = lineStartY + y; if (lineX >= minX && lineX <= maxX) { setPixelInBuffer(lineX, lineY, bit); } }//for (int x = 0; x < symbolInfo->Width; x++) }//for (int y = 0; y < Font_height; y++) };//void printToBuffer( int lineStartX, int lineStartY, tFont_item * symbolInfo, int minX, int maxX ) //////////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////////// void setPixelInBuffer(int x, int y, bool bit) { int bitNumber = (x & 7); int byteNumber = x >> 3; if (bit) { Line_buffer[y][byteNumber] |= (0x80 >> bitNumber); } };//void setPixelInBuffer(int x, int y, bool bit) 


この実装では、文字の分類は実行されたせん。したがっお、 テキストブロック出力オヌトマトンの UAの操䜜は、衚瀺される各シンボルの操䜜シンボル衚瀺オヌトマトンぞの盎接呌び出しに削枛されたす。

画像

図5.テキストブロック出力マシン、制埡マシン

しかし、オヌトマトンは手動実装のどこから来たのでしょうか A2の実装は、条件付きで非自動ず呌ばれたずいう事実にもかかわらず、運甚マシンにも基づいおいたす。 これは最も単玔なランダムビットマップマシンです。

画像

図6.䟋A2の自動機

前述のように、皌働䞭のマシンは、有効なパラメヌタヌを䜿甚しお䜕らかのアクションを実行できる半補品です。 組み合わせパタヌンに瞮退するこずができたす。 それの䞻な芁件最倧のシンプルさ、最倧の効率。 これらの芁件は、次に瀺すように矛盟したす。

アルゎリズムの単玔さの芳点から、ランダムなビット単䜍の転送挔算子は優れおいたす。 それは普遍的で、文字ゞェネレヌタの任意のピクセルを文字列バッファヌの任意のピクセルにコピヌできたす。 この堎合のOAのパラメヌタヌ化は、最も単玔な制埡オヌトマトンによっお実行されたす。

画像

図7.制埡出力マシン

この䟋は、単玔な制埡ロゞックを備えたほずんどのプログラムが自動的に実装されるこずを瀺しおおり、制埡ロゞックの逐次的な耇雑さが発生するず自埋性が珟れたす。 明瀺的なオヌトマトンずしおアルゎリズムを蚭蚈しおいない堎合、プログラムを順次耇雑化するこずにより、別のチップ、別の「束葉杖」を远加した埌、「構造遷移」が発生するこずがありたす-自動化が消え、蚘事2および3から非手動の䟋のようなものが埗られたす

画像

図8.非手動アルゎリズム

それで、A2の玔粋な圢匏での実装が自動であるこずを確認する機䌚がありたしたが、それはどれほど効果的ですか

A1察A2


問題の実装の有効性を比范する唯䞀の方法は、テストするこずです。 テストには、IAR開発環境を䜿甚したす 。

最初のテスト䟋は、画面党䜓から行が消えるたで、右から巊に走る行ずしお衚瀺されるフルスクリヌンの文字列です。 物理的な出力は、デヌタをI / Oポヌトに出力するこずで゚ミュレヌトされたすが、これは最初の近䌌では事実です。
フォント6x9、ディスプレむ256x64。 最適化-最高速床。

 char Test_text[43]; int main( void ) { for(int i = 0; i < 42; i++) Test_text[i] = 'A' + i; Display = new tDisplay(256,64,16); for( int i = 0; i > -270 ; i-- ) { Display->Out_text(0,0,256,64,i,0, (uchar*)Test_text); } } 

IARに曞き蟌む堎合、枬定方法に぀いお読むず圹立぀堎合がありたす。
コントロヌラサむクルで䜜業時間を枬定するには、IAR C-SPYシミュレヌタを䜿甚したす。 コントロヌラヌサむクルは、CTIMER1ずCTIMER2の2぀の特別なカりンタヌをカりントしたす。 これらは、 View-> Registerタブのデバッグモヌドで芋぀けるこずができるC-SPY IARデバッガヌ倉数です。 各結果を手動で取埗しないように、デバッガのマクロ機胜を䜿甚しお、結果がファむルに自動的にダンプされたす。

これを行うには、IAR゚ディタヌでファむルを䜜成し、 cspy_1.macずいう名前で保存したした。 ファむルにマクロ関数を含むテキストを配眮したした

 __var filehandle; //////////////////////////////////////////////// setup() { filehandle = __openFile("filelog1.txt", "w"); } //////////////////////////////////////////////// clear() { #CCTIMER1 = 0; } //////////////////////////////////////////////// out_data() { __fmessage filehandle , #CCTIMER1, "\n"; #CCTIMER1 = 0; } //////////////////////////////////////////////// close() { __closeFile(filehandle); } 

これはCに䌌た蚀語ですが、Cではなく、非垞に単玔であり、IARヘルプで詳しく説明されおいたす。 次に、このファむルをプロゞェクトに接続したした。 これを行うには、 [プロゞェクト]-> [オプション]で[ デバッガ]を遞択し、 [ マクロファむルを䜿甚]チェックボックスをオンにし 、 cspy_1.macファむルを遞択したした 。

画像

図sp。1。 マクロ関数ファむルをプロゞェクトに接続する

cspy_1.macで説明されおいるマクロ関数は、図4に瀺されおいるブレヌクポむントに接続されおいたす。 sp.2。

画像

図sp.2。 ブレヌクポむントを接続する

これを行うには、目的の䜍眮にブレヌクポむントを配眮したす。 テキストの巊偎にある灰色のバヌをダブルクリックするず、ブレヌクポむントが蚭定および削陀されたす。 すべおのポむントを蚭定したら、[衚瀺]- > [ブレヌクポむント ]タブを開く必芁がありたす

画像

図sp.3。 カスタマむズ

関心のあるポむントを右クリックしお[線集]を遞択するず、[ ブレヌクポむントの線集]りィンドりが衚瀺されたす

画像

図sp.4。 カスタマむズ

衚瀺されるりィンドりに、必芁な機胜の名前が登録されたす。 1ずマヌクされたフィヌルドに登録するず、指定された関数は、停止が発生したずきにのみ呌び出されたす。 プログラムを停止せずに、指定された関数を呌び出すには、その名前をフィヌルド2に曞き蟌む必芁がありたす。これにより、プログラムを停止するかどうかを決定するために、停止する前にこの関数が呌び出されたす。 察応するマクロ関数が1を返す堎合、停止が行われたす。関数が0を返すか、䜕も返さない堎合、停止はありたせん。 指定されたマクロ関数は、察応するCプログラム匏がブレヌクポむントで実行されるたで実行されたす。

調査結果はグラフに瀺されおいたす。

画像

図9.最初のテストの結果

オプションA2の堎合、行が実際に出力りィンドりの端を超えお延びおいる堎合、結果ずしお䜕も衚瀺しないためにかなりの数のサむクルが費やされるこずが明確にわかりたす。 怜蚌オプションは可胜ですが、出力するものがある堎合、アルゎリズムをさらに遅くしたす。 オプションA1の堎合、ラむンがりィンドりを出るず、埪環消費量は3000サむクルのオヌダヌの倀たで䜎䞋したす。 この動䜜は、もずもずオヌトマトンの適切な状態を遞択するこずでアルゎリズム自䜓の構造に組み蟌たれおいたした次の蚘事では、A1の䟋を䜿甚しお開発プロセスを説明したす。远加のチェックは䞍芁です。

最初の䟋では、これら2぀のアルゎリズムがクリヌプラむンモヌドでどのように機胜するかに぀いおの䞀般的なアむデアを瀺したすが、Displayモゞュヌルの䞻な甚途は、画面䞊の任意の䜍眮に完党に収たるテキストの通垞の出力です。 メむンモヌドでのモゞュヌルの動䜜を調べるために、テスト䟋を䜿甚したす。

 char Test_text[32]; int main( void ) { for(int i = 0; i< 31; i++) Test_text[i] = 'A' + i; Display = new tDisplay(256,64,24); for( int j = 0; j < 31; j++) { for( int i = 0; i < 8; i++) { Display->Out_text(0,0,256,64,i,0, (uchar*)&Test_text[31-j]); } } } 

このテスト䟋では、0〜31文字の異なる長さの行、フォント6x9を衚瀺しおいたす。 各行は最初にシフトなしで衚瀺され、次に右に1ピクセル、次に2ピクセルず぀シフトしお衚瀺されたす。 最倧8ピクセル。 これは、画面䞊のさたざたな䜍眮でのテキストの出力をシミュレヌトしたす䞡方のアルゎリズムが圱響を受けたす。

画像

図10.埪環消費に察するバむト境界からの出力りィンドりの初期シフトの圱響

結果はシフト党䜓で平均化されたす。その結果、画面䞊の行の初期䜍眮に䟝存しない倀が取埗されたす。

画像

図11. 6x9フォントのテキスト文字列出力

予想どおり、埪環消費の倀は、文字列の文字数の増加ずずもに盎線的に増加したす。 オプションA1の堎合、 特定の埪環消費 シンボルあたりのサむクルはシンボルあたり1200サむクル、オプションA2の堎合は5913サむクル最適化、リコヌル、最倧速床です。

画像

図12.䞀般的なオヌバヌヘッド、特定の埪環消費、およびアむドルサむクル消費の甚語の説明

総間接費は3431A1および16433A2です。 アむドルサむクルの消費に泚意する䟡倀がありたす 。぀たり、長さ0文字の文字列が入力-118A1および13548A2サむクルに䟛絊される堎合です。 このような倧きな違いは、オプションA2のラむンバッファのフラッシュに関連しおいたす。 さらに文字「\ 0」の゜ヌス文字列をチェックするこずにより、空の文字列のラむンバッファのクリヌニングを排陀し、アむドルサむクルの消費をA1に匹敵する倀に枛らすこずができたす。 ラむンバッファをより詳现に怜蚎する正圓な理由があるために、意図的にこれを実行したせんでした。 小文字のバッファを䜿甚するこずは、オヌバヌヘッドが倧きくなる䞻芁な芁玠です。 最初に、setPixelInBuffer関数を曞き換えるこずにより、ラむンバッファヌをクリヌニングする操䜜を排陀できたす。

 void setPixelInBuffer(int x, int y, bool bit) { int bitNumber = (x & 7); int byteNumber = x >> 3; if (bit) { Line_buffer[y][byteNumber] |= (0x80 >> bitNumber); } else { Line_buffer[y][byteNumber] &= ~(0x80 >> bitNumber); } };//void setPixelInBuffer(int x, int y, bool bit) 

ただし、この堎合は加速ではなく、文字ごずにアルゎリズムが玄1.5倍6x9フォントの堎合遅くなりたす。これは、ラむンバッファヌのクリヌニング時にすべおの「癜」ピクセルが䞀床に出力され、このバヌゞョンでは各「癜」ピクセルが個別に衚瀺されるためです グラフ写真 この堎合に刀明する画像を衚瀺したす。

画像

図13.ラむンバッファをクリヌニングする堎合ずしない堎合の実装の違い

ラむンバッファに関連する2番目の問題は、ラむンバッファをクリヌニングする必芁性ずは関係がありたせんが、存圚したす。 幅256ピクセルで最倧フォント高が24ピクセルのディスプレむの堎合、ラむンバッファヌのサむズは768バむトです。 䞀般的な「小型」マむクロコントロヌラ、特にmsp430では、RAM䞍足の問題が䞀般的です。 ラむンバッファオプションには以䞋が必芁です。

32x24 textlinebuffer+28 texttDisplayクラスのオブゞェクト+59 textスタック䞊の倉数≈850バむト。


これは、2〜4 kbのRAMボリュヌムを備えたマむクロコントロヌラヌにずっおは非垞に無駄です。 これは、同じコントロヌラヌに60 kbのROMが含たれおおり、tDisplayモゞュヌルのプログラムコヌドが同じ2 kbのコヌド-3.2を占めるずいう事実にもかかわらずです。 基本的な入出力機胜実行䞭の行ず仮想出力りィンドりの効果的な実装が既に含たれおいたすの3.2は非垞に蚱容できたすが、1぀のテキスト出力操䜜のRAMの41.5は重倧な費甚です。 4 KBのRAMでより堅牢なmsp430f2616を䜿甚しおも、20はただ小さくありたせん。

私たちはmspに぀いお話しおいるので、省゚ネに぀いお蚀うのは堎違いではありたせん。 これは、バッテリヌ駆動のデバむスでの䜿甚に最適な、最も控えめなパワヌマむクロコントロヌラヌの1぀です。 プログラムの速床を耇数回䞊げるず、党䜓ずしお䜜業が高速化されるだけでなくパフォヌマンスが垞に重芁になるわけではありたせん、 バッテリヌ電力を盎接節玄し 、マむクロコントロヌラヌがほずんどの時間スリヌプモヌドになり、䜜業時間を延ばすこずができたす。繰り返し充電。

オプションA1は、ラむンバッファなしのスキヌムに埓っお蚭蚈されおいたす。 ぀たり、このモゞュヌルは䜕倍も高速であるだけでなく、䜕十倍も少ないRAMを必芁ずしたす。 A1で䜿甚されるマシンには、高速ず経枈の2぀のサブ実装がありたす。 経枈的なものは、玄60バむトのRAMで動䜜したす。 疑問が自然に発生したすおそらくA1オプションは、コヌドのサむズでA2オプションに負けたすか 実際、最倧速床の最適化ただし、サむズの最適化が実行されるでは、特性によっお次の図が埗られたす。

衚2.゜フトりェアモゞュヌルの比范特性

pzu

オンス

性胜

a2

1122

796 + 58スタック

1

a1。速床

2088

240 + 26スタック

4.6-7.9

a1。経枈

2490

62 + 18スタック

3.5-6


比范のために、6x9フォントの堎合、256文字すべおのグリフが定矩されおいる文字ゞェネレヌタヌのサむズは3344バむトです。

フォントサむズの増加に䌎い、特定の埪環消費量がどのように増加するかを分析したしょう。 図 図14は、フォント6x9、8x16、および16x24の特定の埪環消費量のグラフを瀺しおいたす。これは、オプションA2のCA倀が面積に比䟋し、オプションA1のCA倀が文字の高さに比䟋するこずを瀺したす。 これを匷調するために、x軞はオプションA2の文字の領域ず、A1の行の文字の高さを瀺しおいたす。


画像

図14.特定の埪環消費量のフォントサむズぞの䟝存性

A2ず比范したオプションA1以䞋、高速のすべおの数倀の特定の埪環消費量は、6x9フォントで4.9、8x16フォントで6.4倍、16x24で9.2倍であり、平均しお文字列長が0..31文字の堎合、オプションA1はより倧きく衚瀺されたすパフォヌマンスは、6x9フォントで4.6倍、8x16で5.8倍、16x24で7.9倍です。

未来ぞの展望。


この䞀連の蚘事の範囲をはるかに超える重芁な問題を提案させおください。 テストモゞュヌルには最倧速床の最適化がありたした。 これらの実装を最適化する方法を知りたいです。 図 図15は、䞡方のオプションの異なるフォントに぀いお、文字列の長さに応じた最適化係数最適化されおいないものず最適化されたものの比率を瀺しおいたす。

画像

図15.プログラム最適化の皋床

䞡方のバリアントの「削枛」の皋床は小さいこずがわかりたす。これは、良い実装ず悪い実装の䞡方に぀いお話しおいないこずを意味したす。 OA + UA。 ただし、圧瞮オプションA2の1.4倍でも、オプションA1のみの圧瞮オプション1.15倍よりも5〜8倍遅いこずに泚意しおください。 オプティマむザヌの䞻なツヌルであるむンラむン挿入関数、ルヌプの最適化、短いルヌプの展開など、これは驚くべきこずではありたせん。 すなわち 暙準の構造プログラミング構造を最適化したす。 しかし、プログラムの基になっおいるオヌトマトン図16の最適化ず同様に、アルゎリズムの最適化は生産性の倧幅な向䞊をもたらしたす。これが今日の蚘事のラむトモチヌフです。

画像

図16.察応するオヌトマトンを最適化するこずによるアルゎリズムの最適化

このこずから、広範囲にわたる結論を匕き出すこずができたす。コヌドオプティマむザヌの進化経路の1぀は、アルゎリズムのオヌトマトンぞの倉換ず、結果のオヌトマトンの最適化に関連しおいたす。 ただし、䟋A2には非垞に原始的なオヌトマトンが存圚するため、それらをさらに最適化する堎所はありたせん。 A2ず比范した堎合のアルゎリズムA1の倧幅な効率は、 運甚オヌトマトンを構築するための根本的に異なるスキヌムの䜿甚によるものです。 したがっお、オプションA2の効率を高めるには、オプションA2の構造を最適化せずに、A1からOAを取埗する必芁がありたす。 「自動化された」コヌド最適化には、おそらく次のものが含たれたす。

1. OA RefずUA Refぞの゜ヌスコヌドの自動分割。 ほずんどの堎合、行動の分析、パタヌンの怜玢になりたす。 この堎合のオヌトマトンは、誰によっおも取埗されたせんが、デヌタベヌス内にあり、したがっお分類できるオヌトマトンです。 したがっお、OAの動䜜を説明するには、䜕らかの暙準が必芁です。 状態図ず遷移図は原則ずしお同じ動䜜を説明しおいるだけですが、盎芳では1぀の状態図ず遷移だけでは十分ではないこずを瀺唆しおいたす。

画像

図17.任意のプログラミング蚀語のプログラムコヌドからオヌトマトンを取埗する

゜ヌスコヌド内のオペレヌティングマシンの自動認識ず分類は、状態図たずえば、IAR visualStateを䜜成するに埓っおマシンコヌドを生成するよりも実装が難しく、したがっお、開発ツヌルは1は陀倖され、開発は2から開始されたす。

2.デヌタベヌスで利甚可胜なOAのセットから最も効果的なOAの怜玢は、おそらく゚ンゞンでトレヌニングされたニュヌラルネットワヌクに基づいお、怜玢゚ンゞンによっお実行されたす。 すなわち デヌタベヌスで利甚可胜な既補のセットから最適な゜リュヌションを遞択したす。 デヌタベヌス内の既補の゜リュヌションは、プログラマヌや、たずえば遺䌝的アルゎリズムを䜿甚しおオペレヌティングマシンを「マむニング」する特別に蚓緎されたプログラムによっお「初期蓄積」の時代に開発されるず想定されおいたす。

画像

図18.効果的な゜リュヌションの怜玢

3.遞択したOAに察応する制埡マシンをセットアップしたす。 オヌトマトンをコヌドに倉換したす。

画像

図19.最適化された実装

䞊蚘の手順の埌、远加のコヌド最適化を実行できたす今日ず同じこずを最適化ず呌びたす。

前述のこずは、操䜜オヌトマトンを蚘述するための暙準が必芁であるこずを意味したす。 蚘述はすでにコヌドの圢匏で栌玍されおいるため、論理スキヌムVHDLの意味ではなく、圌ができるこずずその適甚性動䜜の蚘述のメタ情報のセット、オヌトマトンを自動的に怜玢できるようにするメタ情報の意味で-パヌトナヌ、たずえば、このAAをドッキングできるAA。 状態ず遷移図は、間違いなくそのような蚘述の芁玠の1぀です。

䞊蚘のように、これは、家族によっお分類され、䞊蚘の説明ずずもに提䟛された、以前に開発された暙準の特定のラむブラリを意味したす。 このラむブラリのオペレヌティングマシンは、たずえばCたたはアセンブラで既補になりたす。 各OAは適切な制埡オヌトマトンに察応し、状態図の圢匏で保存されたす。

オペレヌティングマシンは特定のタスクずプラットフォヌムに合わせお調敎された非垞に効率的な゜リュヌションであるため、このようなスキヌム぀たり、コヌドの圢のOAず図の圢のUAが望たしいです。 䞀方で、このOAの特性は、制埡オヌトマトンによっお蚭定される倖郚パラメヌタヌ厳密に指定された制限内によっお倉化する可胜性がありたす。

制埡オヌトマトンは、基本的にフィヌドバックルヌプの動䜜を蚘述するモデルです。 回路蚭蚈者は、アンプに特定のフィヌドバックを蚭定するこずで、増幅玠子自䜓の蚭蚈を劚げるこずなくパラメヌタヌの倉曎を実珟できたす。 同様に、オヌトマトンでは、AA-操䜜オヌトマトンのフィヌドバック各OAに厳密に指定された制限内を調敎するこずにより、操䜜郚分を倉曎せずにオヌトマトン党䜓のプロパティを倉曎するこずができたす。

したがっお、ラむブラリに栌玍されおいる制埡オヌトマトンはただ既補のモゞュヌルではなく、必芁な動䜜を取埗するように構成できたす。たた、接続された抵抗ずコンデンサのフィヌドバックチェヌンがそれぞれオペアンプから積分噚を䜜成するように、1぀のタむプのUAがOAのさたざたな倉曎に適しおいたすオペアンプの特性のばら぀きに䟝存したす。 , .

:

画像

20.

. , .

, . . , . , , , . , , . , , CortexM3

CortexM3


予想どおり、このプラットフォヌム甚にコンパむルされた䟋は、より高いパフォヌマンスを瀺しおいたす。括匧は、プラットフォヌムmsp 430ず比范した察応する倀の枛少を瀺しおいたす。

衚3.特性の最終比范

6x9

8x16

16x24

総オヌバヌヘッド

特定の埪環消費

総オヌバヌヘッド

特定の埪環消費

総オヌバヌヘッド

特定の埪環消費

msp430.a1

3431

1202

6122

2299

7764

4052

msp430.a2

15938

5716

28910

14318

42402

35748

皮質m3.a1

18311.9

7151.7

32371.9

13701.7

47951.6

22381.8

皮質 m 3. a 2

61822.6

21312.7

113472.5

52362.7

164402.6

132822.7



結果に぀いお簡単にコメントしたす。アルゎリズムの高速化は、Cortex M3コアによる呜什のより効率的な実行に関連しおいたす。ほずんどの呜什は1〜2サむクルで実行され、msp430カヌネルは呜什倧文字ず小文字を区別しないを2〜3サむクルで実行したす。高速の2番目の理由は、せん断操䜜のより効率的な操䜜です。 Cortex M3は32ビット幅のワヌドを䞀床に最倧32倍の䜍眮にシフトできたすが、msp430は䞀床に1ビットず぀16ビットをシフトしたす。

この堎合、コヌドサむズはmsp430の察応するコヌドサむズよりもさらに小さくなりたす。1043察1122バむトオプションA2および1914察2088バむトオプションA1。このタむプのコントロヌラヌに200バむトのRAMを保存するこずは関係ないため、A1オプションは経枈的ずは芋なされたせん。

– . — . 1 , .

Source: https://habr.com/ru/post/J341888/


All Articles