JP5081901B2 - 依存レベルを用いたマルチスレッドスプレッドシートの処理 - Google Patents

依存レベルを用いたマルチスレッドスプレッドシートの処理 Download PDF

Info

Publication number
JP5081901B2
JP5081901B2 JP2009509832A JP2009509832A JP5081901B2 JP 5081901 B2 JP5081901 B2 JP 5081901B2 JP 2009509832 A JP2009509832 A JP 2009509832A JP 2009509832 A JP2009509832 A JP 2009509832A JP 5081901 B2 JP5081901 B2 JP 5081901B2
Authority
JP
Japan
Prior art keywords
expression
chain
dependency
child
formula
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Fee Related
Application number
JP2009509832A
Other languages
English (en)
Other versions
JP2009536766A (ja
Inventor
ジェイ.デュザク ジェフリー
ベッカー アンドリュー
ジェイ.アンドロスキ マシュー
キャンベル デュアン
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Microsoft Corp
Original Assignee
Microsoft Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Microsoft Corp filed Critical Microsoft Corp
Publication of JP2009536766A publication Critical patent/JP2009536766A/ja
Application granted granted Critical
Publication of JP5081901B2 publication Critical patent/JP5081901B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F17/00Digital computing or data processing equipment or methods, specially adapted for specific functions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F40/00Handling natural language data
    • G06F40/10Text processing
    • G06F40/166Editing, e.g. inserting or deleting
    • G06F40/177Editing, e.g. inserting or deleting of tables; using ruled lines
    • G06F40/18Editing, e.g. inserting or deleting of tables; using ruled lines of spreadsheets
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5061Partitioning or combining of resources
    • G06F9/5066Algorithms for mapping a plurality of inter-dependent sub-tasks onto a plurality of physical CPUs

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Audiology, Speech & Language Pathology (AREA)
  • Artificial Intelligence (AREA)
  • Health & Medical Sciences (AREA)
  • Computational Linguistics (AREA)
  • General Health & Medical Sciences (AREA)
  • Data Mining & Analysis (AREA)
  • Databases & Information Systems (AREA)
  • Mathematical Physics (AREA)
  • Management, Administration, Business Operations System, And Electronic Commerce (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
  • Devices For Executing Special Programs (AREA)

Description

本発明は、依存レベルを用いたマルチスレッドスプレッドシートの処理に関する。
データ分析のために、スプレッドシートアプリケーションを使用することが、普及している。さらに、企業が、このような複雑なデータ計算のためのアプリケーションにますます依存するので、このようなアプリケーションの処理を、より速く、より効率的に行う必要性が、望まれている。本件特許出願人製のExel(登録商標)は、このようなスプレッドシートアプリケーションの一例である。「依存」式と言われる、1セルの中の式が、「支援」式と言われる、別のセルの中の内容または式に依存することは、スプレッドシートアプリケーションでは典型的である。セルの内容が変更されると、「リカルク」(recalculation)動作をトリガーすることができ、これらの変更に基づいて、プログラムスレッドを使用して式による反復を行い、再計算を必要とする任意の式をリカルクする。計算動作の処理時間は、リカルクプログラムスレッドが、まだ計算されていない支援式に依存している式に行き当たると、すべて中断されないにせよ、かなりの時間、速度が低下する場合がある。複数のプロセッサ、または複数のプログラムスレッドが、そのようなアプリケーションに用いられたとしても、計算およびリカルクの速度性能は、支援式が計算されるのを待っている間、少なくともプロセッサの1つが、計算またはリカルクを完了することができないところでは、改善できない。スプレッドシートアプリケーションの依存式の数が増えるにつれて、問題は悪化する。
背景技術で、具体的な問題を扱ったが、本開示は、そのような具体的な問題を解決するために限定される、いかなる方法のためのものではない。
本発明の実施形態は、一般的には、2以上のプロセッサまたは処理エンジンが、利用できる場合、複数のプロセッサ、または複数の並行スレッドを用いた、スプレッドシート計算および再計算の処理に関する。さらに実施形態は、エントリのチェーンを並び替えて、リカルク動作のマルチスレッド処理を実行する際の、ツリー構造および依存レベルの使用に関する。またさらに、一部の実施形態は、リカルク動作のマルチスレッド処理を同期化することに関する。
本明細書に説明されるように、特定の実施形態の態様は、子チェーン(例えば、ツリー階層に組織された、依存式ならびに支援式)および、依存式も支援式も含まないENTから成る統一リカルクチェーンを作り出すために、エントリまたは「ENT」の計算チェーンを並べ替えることに関する。「ENT」は、スプレッドシートのセル内に含まれた式を参照する。別の実施形態では、統一チェーンは、個別の依存レベルに分けられ、各依存レベルは、その依存レベル内の子チェーンの支援式に依存しているものとは別に、前の依存レベルのENTのみに依存する、ENTを含む。このような実施形態の配置によって、複数のスレッドは、未計算の支援ENTが計算されるのを待つ必要もなく、依存レベル全体で、ENTの処理を続行することができる。次の依存レベルに到達するとすぐに、その中に配置されたENTおよび子チェーン(必要であれば)の処理は、すでにその前の依存レベルにおいて完了した計算に基づいて、効率的に実行される。
さらに実施形態は、システムが、2以上のプロセッサまたは処理エンジンから成る、複数の非同期プログラムスレッドを使用して、このような統一リカルクチェーンの式を評価することに関する。実施形態において、制御スレッドを使用して、このようなマルチスレッド処理の同期化を制御できる。
本発明の概要は、簡略化形式で、概念の一つの選択を紹介するために提供され、以下の詳細な説明において、さらに説明される。本発明の概要は、請求された発明の対象の主要なまたは本質的な機能を、明らかにするためのものでも、請求された発明の対象の範囲を限定する、いかなる方法に使用されるためのものでもない。
本発明の実施形態に係る、スプレッドシートアプリケーションで使用される「リカルクエンジン」(recalculation engine)の数「N」を含む、例示的な機能的コンポーネントモジュールの論理的説明を示す図である。 本発明の実施形態に係る、スプレッドシートアプリケーションのローディング、およびそれとともに使用するプロセッサの数の判定を行う、図1に示されたシステムによって実行される基本動作を表す図である。 本発明の実施形態に係る、図1に表されたリカルクエンジンを用いて、リカルク動作を実行するために、図1に示されたシステムによって実行される基本動作を示す図である。 本発明の実施形態に係る、図1に示された機能的コンポーネントモジュールを使用して、スプレッドシートアプリケーションの値および/または複数の式を有するセルエントリを示す、例示的な3×3スプレッドシートを表す図である。 本発明の実施形態に係る、最初に、単一計算チェーンの中にロードされるものとして、図4に示したスプレッドシートのセルを示す図である。 子チェーンの統一リカルクチェーンの中に、並び替えられたものとして、図4および5に示したセルを表す図である。 本発明の実施形態に係る、2つの再計算エンジンにロードされ、依存レベルに分けられて、セルの1つが、第2依存レベルへの移動を完了した、図6Aの子チェーンを示す図である。 本発明の実施形態に係る、2つに分かれたリカルクエンジン、および各々のリカルクエンジンに対して並び替えられたセルの待ち行列によって、図4に示したセルの処理を示す図である。 本発明の実施形態に係る、図7の待ち行列に入れられたセルの最適でない並び替えの説明を表す図である。 本発明の実施形態に係る、図7に示したリカルクエンジンのスレッドを、同期化するプログラムコードを示す図である。 本発明の実施形態に係る、図2に示したセルの値および式の評価を開始するプロセスの動作特性を示すフロー図である。 本発明の実施形態に係る、図7に示したリカルクエンジンの制御スレッドおよび/または非同期スレッドを、一時停止するまたはトリガーするプロセスの動作特性を示すフロー図である。 本発明の実施形態に係る、図7に示したリカルクエンジンの制御スレッドおよび非同期スレッドを用いて、セルを並び替えるプロセスの動作特性を示すフロー図である。 本発明の実施形態に係る、制御スレッドが、図7に示した待ち行列のセルの並び替え、制御スレッド専用式への働きかけ、およびセルの再表示を可能にするプロセスの動作特性を示すフロー図である。 本発明の実施形態に係る、次の依存レベルに対する、制御スレッド式の並び替えの論理的説明を示す図である。 本発明の実施形態に係る、マルチスレッド処理を用いて、循環式の処理を示す図である。 本開示の実施形態を実装できる、例示的な計算システムを表す図である。
本開示は、具体的な実施形態を示した添付図を、参照して、例示的な実施形態を、より完全に説明する。しかし、他の態様も、多くの異なる形式で実施でき、本開示の具体的な実施形態の内容は、本明細書に説明する実施形態に対し、そのような態様を限定するものとして解釈すべきではない。むしろ、図に表された実施形態は、当業者にとって、徹底された、完全な、対象とする範囲を十分に伝える開示を、提供するために含まれている。全体に示した構造および要素などの図に言及する場合は、参照数字などを用いて示される。点線を使用して、選択的コンポーネントまたは動作を示すことができる。点線を使用して、論理的説明またはある配置から別の配置までのセルの動きを示すこともできる。
プロセッサの数「N」および対応するプログラムスレッドを用いて、スプレッドシート再計算を処理する環境100を、図1に示す。一実施形態において、システム100は、各プロセッサが、その上で動作する「リカルクエンジン」(recalculation engine)104を有し、オペレーティングシステムに利用できるプロセッサの数「N」を含む処理モジュール102を備える。システム100は、データベース116と、ロード制御モジュール112と通信を行うだけでなく、データベース106からのデータを送受信する働きもするI/Oもしくは送受信モジュール114とをさらに含む。言い換えると、ロード制御モジュールは、「ダーティー(dirty)」セルの範囲およびドメイン、または別のセルに変更された内容に依存するもしくは支援する理由から、リカルクを要求するセルを判定する境界検出モジュール110と通信を行う。一実施形態において、ダーティーセルは、再計算コマンドが、送受信モジュール114から受信されるイベントにおいて再計算される。
システム100のマルチプロセッサ環境を使用する、スプレッドシートアプリケーションにおいて、オペレーティングシステムに利用できるプロセッサの数を、判定することが必要である。図2に、図1に示した、スプレッドシートアプリケーションのロードディングまたは呼び出し、およびそれとともに使用するプロセッサの数を判定するシステムによって実行される動作200の基本初期化順序を表す。開始動作202は、スプレッドシートアプリケーションが、ロードアプリケーション動作204においてロードされ、ロード制御モジュール112との通信の後に、開始される。複数のプロセッサ、およびこのような複数のプログラムスレッドを使用して、スプレッドシートチェーン計算のエントリもしくは「ENT」を評価する実施形態において、複数のプロセッサによって、それらのENTの評価を同期化することが必要である。従って、判定動作206は、オペレーティングシステムにおいて、プロセッサの数、および上記のリカルクエンジン104を、判定する。格納動作208は、判定されたプロセッサの数およびそれらのアクセス場所を、データベース116に格納する。一実施形態において、使用されるプロセッサは、個別のプロセッサであるが、他の実施形態において、それらは、1または2以上が単一チップ上に組み込まれた、共同プロセッサである。言い換えれば、リカルクエンジンは、割り当て動作209において、各プロセッサに割り当てられ、次にプロセス200の制御は、復帰動作210に移行する。
図3を参照すると、リカルクプロセス300は、手動もしくは自動計算または再計算要求に応答して開始され、図1に示した、システム100上で実行する、スプレッドシート内のチェーン計算を処理する、開始動作302から始まる。開始動作302から、再計算要求は、送受信モジュール114によって受信され、データは、それらの要求によって要求されるときに、データベース116から検索される。一実施形態において、開始動作302は、ユーザによる手動要求によって、トリガーされ、表示されているスプレッドシートを、再計算する。他の実施形態において、開始動作302は、呼び出しルーチンからの要求によって、またはユーザが、ENTの値もしくは式を変更するか、付加的ENTを、スプレッドシートに付加した場合、自動的にトリガーされる。具体的なトリガリング構造に関係なく、再計算要求は、動作304において、識別または「解決」される。解決動作304の後、リカルク要求のドメインおよび範囲は、動作306において判定される。一実施形態において、このことは、1ENTのみを伴う。別の実施形態において、そのことは、例えば、「ダーティー」ENTなどの変更されたセル内容に依存するまたは支援する、ENTの配列を伴う。判定動作306から、プロセス300は、本発明の実施形態に従って、ダーティーセルを再計算する、リカルク動作308へ進む。再計算が、完了すると、制御は、呼び出しコードまたはユーザインタフェースに復帰させる復帰動作310に移る。
図4は、図3について上述したプロセスを利用して、再計算ができるスプレッドシート400の見本を表す。このような、3×3スプレッドシートの例示的な説明において、行402のセルA1とB1は、例示的な値「=1」を用いて示す。行404のセルA2とB2は、式=A1と=B1を用いて示し、それぞれが、A1とB1に依存している式を表す。同様に、行406のセルA3とB3は、式=A2と=B2を用いて示し、それぞれが、A2とB2に依存している式を表す。最後に、セルC3は、式=A3+B3を用いて示し、そのことは、A3とB3に依存しているという意味である。上記のように、セルA1からC3までの内容は、計算もしくは再計算されなければならない値または式を含むことができ、このような各セルの内容は、エントリまたは「ENT」と呼ばれる。例えば、式「=A3+B3」は、セルC3に配置されたENTである。
図1に示したシステム100を用いたスプレッドシート400を、ロードディングまたは呼び出しすると、プロセッサは、ENTを、スプレッドシート自体へのエントリに基づいて連続した順に、単一計算チェーンの中に順序付けることから開始する。図5に、図4に示したスプレッドシート400のセルA1からC3までの順序付けをする、このような単一計算チェーンを示す。ほんの一例として、セルA1からC3までのENTは、A1、A2、A3、B1、B2、B3、最後にC3の順に、スプレッドシート400内に入力が完了したとする。このように最初に単一チェーンの中でENTを順序付けることにおいて、プログラムコードは、カルクチェーンの最も右端に、第1ENT(例えば、本明細書に言及した例示的な実施形態において、A1)を配置する。次のENTは、右から左へ働き、C3で終了する、連続した順に付加される。
単一計算チェーン500のENTを評価する手順において、カルクコードは、C3から開始し、式A3+B3は、セルA3およびB3の式に依存することを判定する。次に、最初にセルA3を検査すると(それは、その式の最初に名付けられたセルのため)、セルA3は、「ダーティー」または保留の計算であることが判定される。この実施形態において、ENT「A3+B3」は、「依存した」式と呼ばれ、セルA3の式は、「支援する」式と呼ばれる。本発明の実施形態において、単一計算チェーン500は、統一チェーン内の子チェーンを利用して、ツリー構造に組織された依存式および支援式の統一チェーンを作り出すために、並び替えられる。一実施形態において、依存式、例えば、C3は、第1支援式、例えば、A3の子であると判定される。さらに、第1支援式は、第2支援式に依存すると、第2支援式の子を作ることができる。
C3を移動してA3の子になるとすぐに、単一チェーンの次のセル、すなわち図5に示した例示的な実施形態のB3が、評価される。B3の評価を試みると、カルクコードは、B3が、セルB2に依存していること、およびB2が、「ダーティー」であることを発見する。このようなB3は、B2の子になる。同様の形式において、コードは、次のセル、例えばB2の計算を試み、B2は、B1に依存することを判定する。このようなB2は、B1の子になり、B3はB2の子であるため、B1、B2、およびB3からなるすべての子チェーン(図6Aのチェーン600の、子チェーン602として示す)が作られる。次にカルクコードは、A3の評価を試み、A3(上記の子C3を有する)は、A2自体がA1に依存している支援式A2に依存していることを判定する。このようにして、子チェーンA1、A2、A3、およびC3が作られる。このような子チェーンの例示的な説明では、図6Aの子チェーン604として示す。
チェーン604に、子チェーンA1、A2、A3、およびC3を示す一方、図6Bに表された本発明の別の例示的な実施形態では、本発明の別の実施形態に従って、C3がそこから削除された同じ子チェーン610を示す。ここで、C3は、個別の「依存レベル」620に配置された自身のチェーン612に含まれている。実際に、図6Bに、2つの分離した依存レベル、すなわち依存レベル#1(618)および依存レベル#2(620)を示す。各依存レベルは、その依存レベル内の子チェーンの支援式に依存しているものとは別に、前の依存レベルのENTのみに依存しているENTを含む。このような実施形態の配置によって、1または2以上のプロセッサは、未計算の支援ENTが、計算されるのを待つ必要なしに、連続的な形式で、依存レベル全体のENTを処理できる。
個別の依存レベルの利点は、C3は、A3の子であり、同様に、A2およびA1の子である、計算チェーン600の例示的な実施形態に明らかにできる。図400に示したように、C3は、A3とB3の式の和に依存している。このようにC3は、A3とB3の両方に依存している。カルクコードが子チェーン604のC3の評価を試みる前に、B3が計算された場合、カルクコードがC3に到達するときの遅延は、なくなるだろう(例えば、A3とB3の両方は、既に計算が完了しているので、カルクコードは、ただちにC3を計算することができる)。従って、このような実施形態のC3は、子チェーン604の一部としてとどまることができる。しかし、C3がカルクコードによって評価される前に、B3が計算されていないところでは、カルクコードは、C3を計算することができないだろう。結果として、C3は、B3が未計算のままである限り、未計算のままである。従って、子チェーン604の処理は、C3の、B3への依存性に基づいて中断される、または失速するだろう。このような依存性は、リカルク処理において、非効率性を生む可能性がある。このような実施形態では、図6Bの統一カルクチェーンに示したように、C3(612)を与えて、依存レベル#1(618)から依存レベル#2(620)へ移動させる。
複数のプロセッサが利用できる実施形態において、C3を、新しい依存レベルに移動させることによって、第1プロセッサが、子チェーン608の処理を続行している間、子チェーン610に働きかけている第2プロセッサは、そのチェーンの処理を完了し、別のENTまたは依存レベル#1内の子チェーンの処理に移ることができる。各プロセッサは、それらの上で動作するリカルクエンジンを含むので、このような複数のプロセッサは、図6Bのリカルクエンジン#1および#2(それぞれ、614と616)として示す。本発明の実施形態に従って、2つのリカルクエンジンを、図6Bに示す一方、図1の楕円104に見られるように、プロセッサの任意の数「N」を、計算およびリカルク動作をするために用いることができる。
本発明の実施形態に従って、以下に、ENTの並び替えおよびそれらの移動を実行するプロセス622のフローを示し、必要に応じて次の依存レベルまでを示す。開始動作624は、スプレッドシートプログラム400へのセルのローディング、および再計算のための呼び出しに応答して開始される。開始動作624から、上記のように、プロセス622は、ENTが、スプレッドシートプログラム400へのそれらのエントリ順序に基づいて、単一計算チェーンの中に順序付けられる、順序動作626へ進む。次に、評価動作628は、単一計算チェーンの第1式の評価を試みる。第1式の評価を試みた後、プロセス622は、第1式が、支援式に依存しているかどうかを判定するクエリ動作630へ進む。第1式が、支援式に依存している場合、フローはYESへ分岐し、第1依存式を支援式の子の位置に移動させる、移動動作634へ進む。第1式が、支援式に依存していない場合、フローはNOへ分岐し、評価動作632へ進み、第1式が評価される。
移動動作634から、プロセス622は、第1式が第2の未計算式にも依存しているかどうかを判定する、クエリ動作636へ進む。クエリ動作636が、第1式が第2の未計算式に依存していると判定した場合、フローはYESへ分岐し、第1依存式を次の依存レベルに移動させる、移動動作642へ進む。次に、クエリ動作644は、計算チェーンに、評価する式が他にあるかどうかを判定し、そうである場合、YESへ分岐し、評価動作628へ進む。クエリ動作644が、評価する式が他にないと判定した場合、フローはNOへ分岐し、プロセス622を終了させる、終了動作646へ進む。クエリ動作636が、第1依存式が第2の未計算支援式に依存していないと判定した場合、フローはNOへ分岐し、第1支援式は、第2依存式も有するかどうかを判定する、クエリ動作638へ進む。クエリ動作が、第1支援式が第2依存式を有していないと判断した場合、フローはNOへ分岐し、評価動作632へ進む。一方、クエリ動作638が、第1支援式が第2依存式も有すると判定した場合、フローはYESへ分岐し、第1および第2依存式が、次の依存レベルに移動される、移動動作640へ進む。移動動作640から、プロセス622は、クエリ動作644へ進み、他の式が、評価を必要とするかどうかを判定し、そのプロセスは、上記のように進む。
図6A、6B、および上述したフローにおいて説明したENTの並び替えは、一般的には、プロセッサの数を問わない(例えば、1または2以上のプロセッサを使用する)並び替えに関連しているが、図7に、複数のリカルクエンジンおよび非同期スレッドの使用によるスプレッドシート400からの単一計算チェーンの並び替え700を具体的に示す。制御スレッド702を用いて、さまざまなスレッドおよびリカルクエンジンを同期させる。システム700の例示的な実施形態において、2つのリカルクエンジン704および702が用いられるが、他の実施形態では、任意の数のリカルクエンジンおよび対応するマルチスレッド処理動作を伴うことができる。
図7に表した例示的な実施形態に従って、リカルクエンジン1(704)からの処理スレッドは、単一計算チェーン708のC3の評価を試みる。C3は、まだ計算されていないA3およびB3に依存しているため、C3は、まだ計算することができない。結果として、リカルクエンジン1は、C3を、依存式および支援式の待ち行列706に移動させる。C3は、依存式としてリスト化され、A3は、C3の支援式としてリスト化される。次に、リカルクエンジン2(712)のプログラムスレッドは、B3の評価を試みる。この依存式を評価できなければ、リカルクエンジン2は、依存B3およびその支援式B2を、それ自身の依存式および支援式である待ち行列710に移動させる。このようなプロセスは、リカルクエンジンが、単一計算チェーン708の各ENTの評価の試みを完了するまで続行する。
チェーン708の各ENTの評価が完了する、または評価の試みが完了するとすぐに、待ち行列706および710は、それらの依存支援関係に基づいて、制御スレッド702によって、子チェーンの中に並び替えられる。上記の子チェーン604と同様、図8に、ENT A1、A2、A3、およびC3を有する子チェーン804を示す。子チェーン802は、ENT B1,B2、およびB3を示す。これら両方の子チェーンは、最初に、図8の依存レベル#1(806)に配置されているものとして示す。一実施形態において、リカルクエンジン1(704)は、B1,B2、およびB3から成る子チェーン802を処理する。次に、リカルクエンジン1は、子チェーン802の処理を開始する間に、リカルクエンジン2は、子チェーン804の処理を開始する。この例示的な実施形態において、リカルクエンジン1は、リカルクエンジン2が、子チェーン804のC3に到達する前に、子チェーン802のB3の処理を終了させることが考えられる。このような場合において、支援式A3とB3の両方は、すでに計算が完了しているため、C3を計算できる。この実施形態において、図8に、C3は、依存レベル#1(806)に配置されているものとして示し、依存レベル#2(808)は、空として示す。しかし別の実施形態において、リカルクエンジン1は、リカルクエンジン2が、C3の評価を試みる前に、B3を評価できないことがあり得る(幾多の理由による)。このような場合において、C3は、リカルクエンジン1が、B3の処理を終了させるのを待っている間、未計算のままであり、リカルクエンジン2は、失速したままであるだろう。このような失速によって、リカルクエンジン2は、第1依存レベル内に存在し得る、他のENTおよび子チェーンの処理ができなくなる(しかし、このような付加的チェーンは、図8の例示的な実施形態に示していない)。失速したリカルクエンジンは、マルチプロセッサシステムのマルチスレッドの処理能力の利用が、非効率的である(例えば、リカルクエンジン2に対して要求されたリカルク動作が、単一リカルクエンジン1の処理速度に依存している場合)。従って、図8に示した実施形態では、セルの並び替えが最適ではない。反対に、最適な並び替えは、図6Bに示した例示的な実施形態および上記の参照によって示されるだろう。
図8に、C3が依存レベル#1(806)にとどまっている、ENTの最適でない並べ替え800を示すが、他の実施形態(B3がC3の評価時には、未計算のままであるところ)では、C3に、依存レベル#2(808)に移動するように要求するだろう。一実施形態において、次の依存レベルへのENTの移動を統制する公式を示す。
(1)依存式を、支援式の子にするように試みる。
(2)依存式が、すでに別の式の子である場合、その依存式は、次のレベル依存レベルの待ち行列に入れられる、または
依存式が依存する支援式が、すでに子を有する場合、その依存式は、次の依存レベルの待ち行列に入れられる。
(3)式が、制御スレッド上で評価されなければならない関数を含む場合、その式(「制御スレッド式」と呼ばれる)は、次の依存レベルに移動される。ほんの一例として、以下の関数は、制御スレッド上で評価されなければいけない。
(a)INDIRECT関数
(b)GETPIVOTDATA関数
(c)INFO関数
(d)ADDRESS関数
(e)UDF(User-Defined Function)
図9を参照して、本発明の実施形態に従って、図7に示したリカルクエンジン1および2の非同期スレッドを、トリガリングするおよび一時停止するプログラムコード900の例示的な実施形態を示す。制御スレッド902は、非同期スレッドのトリガリングを制御する。最初に、カウンタ906が、判定動作206によって判定されたプロセッサの数に設定される。カウンタ906は、どの種類のカウンタでもよい。例示的な実施形態において、カウンタ906は、ISpinningと呼ぶことができる。使用されるカウンタの期間または種類に関係なく、「CT」(control thread)902のカウンタ906は、マルチスレッド処理に利用できると判定されたプロセッサの数に設定される。図9の例示的な実施形態において、このようなカウンタ906は、リカルクエンジン910と920に対して値「2」に設定される。さらに、制御スレッドインデックス、例えば、int ientNextは、「0」(zero)に設定され、各リカルクエンジンのインデックス914および924、int iENTは、「0」に設定される。下記のように、これらのインデックスは、ENT912と922のポインタを制御する。インデックス値「0」は、第1セル、例えば、単一計算チェーン918の左側にあるC3に対するインデックスである。
図10Aおよび10Bに、リカルクエンジン1(910)および2(920)の非同期スレッド動作を、トリガリングおよび一時停止して、単一計算チェーン918を評価する、動作ステップ1000を示す。図10Aの計算開始動作1002は、図4に示したスプレッドシート400などのスプレッドシートを評価するために、ローディングまたは呼び出しに応答して開始される。カウンタ906は、設定動作1004のリカルクエンジンの数に設定される。次の割り当て動作1006では、制御スレッド902は、リカルクエンジン1と2のインデックス914と924に、それぞれ「0」を設定して、各スレッドを割り当て、第1ENTでの評価を開始できるようにする。次に制御スレッド902は、各リカルクエンジン上で、イベント916と926をトリガーして、トリガー動作1008において、処理するスレッドを起動させる。アプリケーションの呼び出しまたはローディングは、制御スレッド902が、リカルクエンジンのイベントをトリガーできる、イベントの例である。トリガーされると、各リカルクエンジンは、スレッドの安全と連動したインクリメント動作1010を実行する。例えば、リカルクエンジン910は、制御スレッド902から復帰した際、「1」を、制御スレッドインデックス904に付加すること、およびインデックス904の前の値、例えば、この実施形態において「0」を受信することによって、この連動されたインクリメント動作1010を開始する。第1リカルクエンジンのインデックス値914と、制御スレッド902から復帰した制御スレッドインデックス904の値との差は、リカルクエンジン1が、単一計算チェーン918を反復しなくてはならない値である。この例示的な実施形態において、リカルクエンジン1(910)は、制御スレッドインデックス904を、値「0」から値「1」にインクリメントする。「0」は、制御スレッドインデックス904の前の値だったので、リカルクエンジン1(910)は、値「0」を受信し、それを、この例示的な実施形態に従って、それ自身のインデックス914、例えば、「0」と比較し、これら2つの値の差、例えば、「0」−「0」=「0」を判定し、値「0」を受信する。値「0」は、計算チェーン918の第1ENT(例えば、C3)を評価するために、リカルクエンジン1(910)を必要とする。
同様に、リカルクエンジン2(920)は、制御スレッドインデックス904を「1」から「2」にインクリメントし、代わって、制御スレッドインデックス904の前の値、例えば、この例示的な実施形態において「1」を受信する、スレッドの安全と連動したインクリメント動作を実行する。次にリカルクエンジン2(920)は、制御スレッド904から復帰した値「1」と、それ自身のインデックスの値、例えば、この例示的な実施形態において「0」とを比較し、これら2つの値間の差である「1」を算出する。このように値「1」は、計算チェーン918の第2ENT(例えば、B3)を評価するために、リカルクエンジン2(920)を必要とする。
一実施形態において、このスレッドの安全と連動したインクリメンティングは、依存チェーンが終了するまで続行する。連動したインクリメンティング動作1010を実行すると、各リカルクエンジンは、動作1012において割り当てられたENTの評価を開始する。チェーン918を評価するために、非同期スレッドがトリガーされると、制御スレッド902は、ステップ1014でのそれ自身の動作を一時停止し、それ自身のイベント908が、トリガーされるのを待つ。次にプロセス1000は、復帰動作1016に移行する。
一実施形態において、リカルクエンジンの動作は、リカルクエンジン自身によって、個別に一時停止できる。別の実施形態において、リカルクエンジンは、全ての非同期スレッドが、一時停止することを要求できる。最初の実施形態において、非同期スレッドは、依存レベルの最後に到達すると、それ自身を一時停止する。別の実施形態において、非同期スレッドは、そのスレッドの待ち行列またはバッファが、依存式および支援式で満杯になると、一時停止できる。他の実施形態は、非同期スレッドを一時停止する他の理由を伴う場合がある。本明細書に定められた例は、例示的な実施形態としてのみの目的を果たすためのものである。さらなる実施形態において、非同期スレッドは、全てのスレッドが中断(例えば、制御スレッド式が、非同期スレッドによって検出されるところ)されることを要求できる。
上の図10Aに説明した、スレッド動作のトリガリングに続いて、個別の非同期スレッド動作を一時停止または中断する「一時停止」プロセス1018を、例示的な実施形態に従って、図10Bに説明する。本発明の実施形態に従って、図10Bに表したフローチャートに、2つのスレッド間の動作の経過を示す。別の実施形態において、それらのスレッドは、同時に動作できる。図10Bに表したフローチャートは、例示的な実施形態としてのみの目的を果たすためのものであり、決してスレッドの動作を限定するものとして解釈すべきではない。上記の図10Bを参照すると、スレッドは、依存レベルの最後に到達したことを検出した場合、その動作を一時停止できる。別の実施形態において、スレッドは、待ち行列またはバッファが満杯であることを検出した場合、その動作を中断できる。このように、開始動作1020から、依存レベルの最後に到達したかどうか、またはリカルクエンジン#1のバッファが満杯であるかどうかを判定する、クエリ動作1024へ進む。クエリ動作1024が、依存レベルの最後にまだ到着していないこと、およびそのスレッドに対する待ち行列が満杯でないことを判定した場合、フローはNOを通過し、スレッドがENTを評価し、計算チェーンを反復するために続行する、続行動作1026へ進む。一方、クエリ動作1024が、依存レベルの最後に到達したこと、またはそのスレッドに対するバッファが満杯であることのどちらかを判定した場合、フローはYESを通過し、デクリメントカウンタ動作1028へ進む。デクリメントカウンタ動作は、制御スレッドのカウンタ906を、デクリメントする。それ自身の動作を一時停止するには、リカルクエンジンは、他の機能の間で、制御スレッド906のカウンタをデクリメントする。カウンタ906が、「0」より大きい値を有する場合、スレッドは動作をする、またはずっと一時停止解除を保たなければならない。しかし、カウンタの値が「0」の場合、全てのスレッドは、一時停止され、制御スレッド902のイベント908は、トリガーされる。制御スレッドカウンタ906をデクリメントすると、リカルクエンジン#1は、スリープ動作1030において一時停止され、または換言すれば、スリープモードに入る。次にクエリ動作1032は、制御スレッドカウンタ906が、「0」に等しいかどうかを判定する。カウンタ906が値「0」を有する場合、値「0」は、全ての非同期スレッドが一時停止されていることを示すため、フローはYESに分岐して、動作1034でのトリガー制御スレッドイベント動作908へ進む。カウンタ906が値「0」を有しない場合、フローはNOに分岐して、制御がリカルクエンジン#2へ通過する、通過動作1036へ進む。リカルクエンジン#2は、上記のリカルクエンジン#1に対するものと同様である、ステップ1038から1048までを通って進む。
必要な並べ替えを判定し、必要に応じて制御スレッド式を検出するために、計算チェーンによって反復するプロセス1100を、本開示の実施形態に従って示す。上記のように、図11に示した本発明の例示的な実施形態は、2つのスレッド間の動作の経過を表す。別の実施形態において、スレッドは、同時に動作できる。図11に表されたフローチャートは、例示的な実施形態としてのみの目的を果たすためのものであり、決してスレッドの動作を限定するものとして解釈すべきではない。図11を参照して、開始動作1102は、各リカルクエンジンのイベント1008のトリガリングの後に開始される。開始動作1102から、動作フローは、リカルクエンジン#1が連動したインクリメント動作1104へ進む。次にリカルクエンジン#1は、スレッドが安全なインクリメント動作1104によって割り当てられた、計算されたENT値に対する反復動作1106の計算チェーンを反復する。割り当てられたENTが到達すると、フローは、依存レベルの最後に到達したかどうか、または非同期スレッドの待ち行列(またはバッファ)が満杯であるかどうかを判定する、クエリ動作1112を通過する。依存レベルの最後が検出された場合、または非同期スレッドの待ち行列が、満杯であると判定された場合、非同期スレッドは、中断動作1116において、それ自身の動作を中断する。中断を必要とするこのような項目が存在しない場合、プロセス1100は、式が制御スレッド式であるかどうかを判定する。制御スレッド式が検出された場合、待ち行列動作111へ進む。クエリ動作111が、式が制御スレッド式ではないと判定した場合、フローはNOに分岐して、割り当てられたENTの式が未計算ENTに依存しているかどうかを判定する、クエリ動作1120へ進む。クエリ動作1120が、式が未計算ENTに依存していると判定した場合、フローはYESに分岐して、依存式および支援式が適切な待ち行列に配置されている、動作1122の待ち行列1へ進む。クエリ動作1120が、式が未計算ENTに依存していないと判定した場合、フローはNOに分岐して、値を復帰させる、動作1118での式の評価へ進む。
評価動作1118および/または待ち行列動作1122の後に、プロセス1100は、動作が、リカルクエンジン#2に移される、動作1124へ進む。第2リカルクエンジンは、リカルクエンジン#1動作1104から1124までを参照して、上記に対するものと同様である、ステップ1126から1142までを実行する。
図12を参照して、計算チェーンを並び替えて、統一され、並び替えられたチェーンにする制御スレッド動作を伴うプロセス1200を、本発明の実施形態に従って示す。開始動作1202が、制御スレッドイベントのトリガーに応答して開始される。開始動作1202から、フローは、スプレッドシート400のセルを再表示する、再表示動作1203へ進む。再表示動作1203の後に、プロセス1200は、リカルクエンジンの待ち行列にエントリが他にあるかどうかを判定する、クエリ動作1204へ進む。クエリ動作1204が、そのようなエントリが存在すると判定した場合。フローはYESに分岐して、並び替え動作1210へ進む。並び替え動作1210は、依存式および支援式を、統一チェーン内の子チェーンの中に並び替える。この並び替えが完了するとすぐに、クエリ動作1218は、子が作られたかどうかを判定する。子が作られた場合、リカルク動作は、そのような新しい子チェーンを含んでいる依存レベルを、再度通過することが必要である。このように、1または複数の子が作られた場合、フローはYESに分岐して、その依存レベルの始まりを再度開始するために、リカルクエンジンのインデックスおよびポインタをリセットする、リセット動作1224へ進む。そこから、プロセス1200は、非同期スレッドのイベントをトリガーする、起動動作1226へ進む。このようなスレッドは、並び替えられたチェーン上で、リカルク動作を実行する(1228)
クエリ動作1218が、並べ替えの際に、子が一つも作られなかったと判定した場合、待ち行列の1または複数のエントリは、動作1220によって表されたように、次の依存レベルへの移動を完了しなければならない。子が一つも作られなかった場合、進行中の依存レベル内のENTをリカルクする必要はない。むしろ、非同期スレッドの制御インデックスと同様に、非同期スレッドのインデックスおよびポインタは、次の依存レベルのリセット動作1222において、リセットされる。次にフローは、クエリ動作1230へ進み、次の依存レベルに、制御スレッド式が他にあるかどうかを判定する。クエリ動作1230が、次の依存レベルに、制御スレッド式があると判定した場合、フローはYESに分岐して、制御スレッドが、それらの式に働きかけができる、実行動作1232へ進む。それらの式が評価されるとすぐに、フローは、非同期スレッドのイベントをトリガーする、非同期スレッドを起動させる動作1234へ進み、ステップ1230と1232が、上記のように処理される。クエリ動作1230が、そのような式がないと判定した場合、フローは上記のようにNOに分岐して、起動動作1234へ進み、プロセス1200は、ステップ1230から123まで進む。
クエリ動作1204が、リカルク待ち行列にエントリがないと判定した場合、フローはNOに分岐して、制御スレッド902のリンクされたリストに、制御スレッド式があるかどうかを判定する、クエリ動作1206へ進む。上記のように、制御スレッド式は、非同期スレッドの1つによるものとは対照的に、制御スレッドによって評価されなければならない式である。制御スレッド式が、待ち行列に入れられている場合、フローはYESに分岐して、制御スレッド式が統一チェーンの次の依存レベルに移動される、動作1212へ進む。制御スレッド式を、進行中の依存レベルの後に、ただちに新しい依存レベルに移動させることによって、マルチスレッド処理は、制御スレッド式を評価する必要があるにもかかわらず、続行できる。移動動作1212から、フローは、制御スレッド式が他にあるかどうかを判定する、クエリ動作1216へ進む。待ち行列に入れられた他の制御スレッド式がある場合、フローはYESに分岐して、クエリ動作1206へ進み、上記のステップが反復される。クエリ動作1216が、制御スレッド式が他にないと判定した場合、フローはNOに分岐して、次の依存レベルに対する非同期スレッド(および対応する制御スレッドの制御インデックス)のインデックスおよびポインタをリセットする、リセット動作1222へ進む。
制御スレッドが、その動作を一時停止する前に、最初に、クエリ動作1230において次の依存レベルに制御スレッドがあるかどうかを判定し、次に、上記のようにプロセス1200は、ステップ1230から123まで進む。
クエリ動作1206が、制御スレッド式はないと判定した場合、フローはNOに分岐して、動作1208,1214,1216を処理して、次の依存レベルのインデックスおよびポインタをリセットする、リセット動作1222へ進み、上記のようにプロセス1200は、ステップ1222から123まで進む。
図12のステップ1206と1212は、制御スレッド式を、進行中の依存レベルの後に、ただちに新しい依存レベルに移動させるのに関係する一方、図13に、この移動の論理的表示1300を示す。図13に、依存レベル#1(1302)、および依存レベル#2に配置されたC3(1312)を有する、依存レベル#2(1310)を示す。さらに、制御スレッド式「CT」(1308)を、依存レベル#1(囲いのあるチェーン1304およびチェーン1306も同様)に示す。説明したように、制御スレッドが、制御スレッド専用式を実行できるようにするために、本発明の実施形態では、制御スレッド式1308を、制御スレッド待ち行列のリンクされたリストに移動する。次に制御スレッドが、トリガーされ、動作および並べ替えの制御を担うと、制御スレッドは、制御スレッド式を、進行中の依存レベルの後に、ただちに新しい依存レベルに移動させる。このように図13の例示的な実施形態は、依存レベル#2(1316)に移動(1320)されている制御スレッド式1308、および、囲いのあるC3が今度は、個別の依存レベル#3(1318)になっている、依存レベルを示す。1つの制御スレッド式のみを、この実施形態に示す。別の実施形態において、複数の制御スレッド式が、新しい依存レベル1316に移動される可能性がある。代替的に、各制御スレッド式は、依存レベル#1(1314)の後に、それ自身の新しい依存レベルに移動され、依存レベル#3の前に配置される可能性がある。
実施形態において、制御スレッド式は、制御スレッドが、依存レベルの最後に動作するスレッドになるため、次の依存レベルに移動される。非同期スレッドをトリガリングして、次の依存レベルにおいて評価を開始する前に、制御スレッドは、最初に、非同期スレッドのトリガリングの前に実行される必要がある制御スレッド式があるかどうかを判定できる。制御スレッド式を、個別の依存レベルに移動させることによって、複数のスレッド処理が、続行できると同時に、制御スレッド専用動作も続行できる。図13に、3つの依存レベルを示す一方、このようなレベルの任意の数が存在でき、本明細書に示した例示的な実施形態の本質は、このように実行できる依存レベルの数を、決して限定するためのものではない。
図14に論理的に表されたように、本発明の実施形態によって、マルチ処理機能を有するスプレッドシートアプリケーションが、統一計算チェーンのマルチスレッド処理内の循環参照計算(例えば、お互いに依存している計算など)を実行することがさらにできる。スプレッドシート1402に、循環参照コンティンジェンシーを有する、A1からA3までのセルを示す。換言すれば、セルA1の式は、A3に依存し、A3は、式A2に依存し、今度はA2が、A1自身に依存している。この循環参照の問題を解決するために、本発明の実施形態では、単一スレッドを使用して計算するために、循環参照セルが、統一チェーンから外されるまたは分離されて、単一チェーン計算、例えば、子チェーンまたは依存レベルを持たないカルクチェーンに配置されるようにできる。子の関係および/または依存レベルにかかわる統一されたものとは対照的に、単一チェーン計算を用いることによって、反復機能は、最終値に収束するように、チェーン上で反復計算を実行できる。反復カルク1410は、そのような機能の例であるが、本発明の実施形態に従って、循環依存を計算する、任意の種類の反復機能を使用できる。
反復循環計算に対する単一チェーン計算を作成するために、上記のように(例えば、それらのスプレッドシート1402へのエントリに基づいて)セルは、最初に、単一計算チェーンに配置される。この例示的な実施形態において、B1が最初に評価され、他の式に依存していないと判定される。次にチェーンに働きかけ、A3がA2に依存していると判定され、「進行中」と表示され、支援式A2の子になるために、カルクチェーンから除かれる。チェーン1404を、ENT A2まで移動させると、A2がA1に依存していることがわかる。従ってA2は、「進行中」と表示され、カルクチェーン1404から除かれ、支援式A1の子の位置へ進む。A2をA1の子の位置に移動させる際、A2は、A3を連れて行く。次に、チェーン1404を、A1に移動させると、A1は、評価されるのを試される。しかし、1406での識別された循環依存があることから、A1は、A3に依存していることがわかる。A1は、「進行中」と表示され、カルクチェーン1404から除かれる。結果として、並び替えられたチェーン1406に示したように、A1、A2、およびA3は、カルクチェーン1404から完全に分離されている。従って、チェーンによる反復のプロセスにおいて、A1、A2、およびA3は、処理されないだろう。結果として、チェーンによる反復を終了させると、チェーンA1、A2、およびA3は、「進行中」またはダーティーとして、なおも表示されるだろう。このような項目を処理するために、システムは、進行中の再計算プロセスの経過の間、別の式の子が作られる全ての式の情報を得る。次に、プロセスの間に子が作られた全ての式は、それらのうちで、なおもダーティーと表示されていないかどうかをチェックされる。そうである場合、その式およびその子の全ては、フラットカルクチェーン1408、例えば、子チェーンまたは依存レベルを持たないカルクチェーンに移動される。図14Aの1408に示した、このフラットカルクチェーンは次に、単一スレッドを使用して計算される。単一スレッドの計算の間、真の循環参照が検出されると、計算は、たとえば、反復計算機能1410によって、反復的に行うことができる。
こり得る循環参照検出および評価のために、カルクチェーンを、フラットカルクチェーンの中に並び替えるプロセス1411を、本発明の実施形態に従って示す。開始動作1412は、単一カルクチェーン1404を作り出すと、開始される。開始動作1412から、フローは、カルクチェーン1404の第1式を得る、取得動作1414へ進む。次に評価動作1416が、この式を評価する。クエリ動作1418は、その式が、支援式の子であるかどうかを評価する。その式が、支援式の子である場合、フローはYESに分岐して、トラック動作1420へ進み、その子の式は「進行中」と表示され、システムによって記録が付けられる。その式が、支援式の子でない場合、フローはNOに分岐して、処理のためのカルクチェーン1404に、式が他にあるかどうかを判定する、クエリ動作へ進む。他に式がある場合、フローはYESに分岐して、評価のためのカルクチェーン1404の次の式に移動させる、取得動作1414へ進む。他に式がない場合、フローはNOに分岐して、トラック動作1420によって記録付けが完了した、第1(または次の)式を検索する、記録が付けられた式動作1424へ進む。次に、クエリ動作1426は、検索された記録が付いた式が、なおもダーティーと表示されているかどうかを判定する。その式が、なおもダーティーと表示されている場合、本発明の例示的な実施形態に従って、フローはYESに分岐して、フラットカルクチェーン1408に示したように、その式およびその子の全てを、フラットカルクチェーンに付加する、フラットカルクチェーン動作1428へ進む。クエリ動作1426が、記録が付いた式がもうダーティーではないと判定した場合、フローはNOに分岐して、記録付けが完了した(または「進行中」と表示されている)式が他にあるかどうかを判定する、クエリ動作1430へ進む。他に記録が付けられた式がある場合、フローはYESに分岐して、第1または次の記録が付けられた式動作1424へ進み、ステップ1426から1430までが反復される。クエリ動作1430が、記録が付いた式が他にないと判定した場合、フローはNOに分岐して、復帰動作1432へ進む。フラットカルクチェーンが、プロセス1411によって作り出されるとすぐに、このフラットカルクチェーン(ステップ1428において作り出されたように、フラットカルクチェーン1408として示す)は、単一スレッドを使用して計算できる。単一スレッドのカルクの間、真の循環参照が検出されると、式は、反復的に計算できる。トラッキングのための言語である「進行中」を、この例示的な実施形態(および図14の説明時)において使用してきたが、本発明の実施形態に従って、任意の表示または記録付けの構造を使用できる。
図15に、本発明によって実施できる、例示的なコンピューティングシステム1500を示す。少なくとも1つのプロセッサ1502、およびその上で動作する、少なくとも1つのリカルクエンジン1518を有する、コンピュータシステム1500を、図2に示す。システム1500は、スプレッドシートアプリケーション1520が配置された、メモリ1504を有する。その最も基本的な構成において、コンピューティングシステム1500を、点線1506によって、図15に示す。さらに、システム1500は、磁気または光学のディスクもしくはテープを含んだ、付加的な記憶装置(取り外し可能および/または取り外し不能)も含むが、これらに限定されない。このような付加的な記憶装置を、取り外し可能記憶装置1508および取り外し不能記憶装置1510によって、図15に示す。コンピュータ記憶媒体は、コンピュータ読み取り可能命令、データ構造、プログラムモジュールまたは他のデータなどの情報を格納する任意の方法または技術において実施される、揮発性ならびに不揮発性、取り外し可能ならびに取り外し不能の媒体を含む。メモリ1504、取り外し可能記憶装置1508および取り外し不能記憶装置1510は、コンピュータ記憶媒体の全ての例である。コンピュータ記憶媒体は、RAM、ROM、EEPROM、フラッシュメモリもしくは他の記憶技術、CD−ROM、DVD(digital versatile disk)もしくは他の光学式記憶装置、磁気カセット、磁気テープ、磁気ディスク記憶装置もしくは他の磁気記憶装置、または、例えば、望ましいスプレッドシート計算情報を格納するために使用できる、ならびにシステム1500によってアクセスが可能な他の媒体を含むが、これらに限定されない。このような任意のコンピュータ記憶媒体は、システム1500の一部にできる。構成およびコンピューティング装置の種類に依存することによって、メモリ1504は、揮発性、不揮発性、またはそれら2つのある組み合わせにできる。通信媒体は、典型的には、コンピュータ読み取り可能命令、データ構造、プログラムモジュール、または搬送波もしくは他の転送などの変調されたデータ信号の他のデータを実施し、任意の情報送達媒体を含む。用語「変調されたデータ信号」は、その特性セットの1または2以上を有する、または信号の情報を符号化するような方法で変更された信号を意味する。一例として、通信媒体は、有線ネットワークまたは直接有線接続などの有線媒体、音響、RF、赤外線などの無線媒体および他の無線媒体を含むが、これらに限定されない。上記のどの組み合わせも、コンピュータ読み取り可能媒体の範囲内に含めるべきである。
システム1500は、装置を、他の装置と通信ができるようにする、通信接続1512を含むこともできる。さらに、本発明の実施形態に従って、コンテンツを、スプレッドシート400のセルに入力するために、システム1500は、キーボード、マウス、ペン、音声入力装置、タッチ入力装置などの入力装置1514を有することができる。本発明の実施形態に従って、ディスプレイ、スピーカ、プリンタなどの出力装置1516を含むこともでき、このような装置を使用して、スプレッドシート400を、ユーザに表示することができる。このような装置の全ては、当技術分野で周知の通りであり、本明細書で詳細に説明する必要はない。
上記の図を参照して、本開示の実施形態を説明してきたが、多くの変更を、本発明に対して行い、それら自身を、容易に当業者に提案し、開示された発明の範囲と精神内において網羅され、添付の請求に定義されたようにできることを認識すべきである。実際に、現在の好適実施形態を、本開示目的として説明してきたが、さまざまな変化および変更は、本発明の範囲内で十分に行うことができる。
同様に、本開示は、構造的機能、方法論的動作、およびそれらの動作を含んだコンピュータ読み取り可能媒体に特有の言語を使用してきたが、当然のことながら、添付の請求に定義された本発明の対象は、本明細書に説明された特定の構造、動作、機能、または媒体を、必ずしも限定するものではない。むしろ、上記の特定の機能および動作は、本請求を実施する例示的形態として開示される。例えば、いくつかの実施形態において、2つのリカルクエンジンを示して説明してきたが、プロセッサの任意の数「N」およびリカルクエンジンを使用できる。当業者は、本発明の範囲と精神内において、他の実施形態または変更を認識できる。従って、特定の構造、動作、または媒体は、請求される発明を実施する例示的な実施形態として開示される。本発明は、添付の請求によって定義される。

Claims (4)

  1. 複数のプロセッサを用いてスプレッドシートプログラムの式を処理する方法であって、
    前記式を、単一計算チェーンの中に順序付ける第1ステップであって、
    スプレッドシートのセルの第1式が他のセルの式に依存する場合、該第1式を第1の依存式とし、該他のセルの式を第1の支援式とし、該第1の依存式を該第1の支援式の子として関連付けた第1の子チェーンを生成すること、
    前記スプレッドシートのセルの第2式が他のセルの式に依存する場合、該第2式を第2の依存式とし、該他のセルの式を第2の支援式とし、該第2の依存式を該第2の支援式の子として関連付けた第2の子チェーンを生成すること、および、
    全ての式を順序付けて、各々の依存式を対応する支援式の子と関連付けた1または複数の子チェーンを含む単一計算チェーンを生成することを含む第1ステップと、
    前記単一計算チェーンのの式が、第3の支援式に依存しており、かつ、計算されていない第4の支援式に依存している場合、前記第の式を第2の依存レベルに移動する第2ステップであって、第1の依存レベルが前記第1の子チェーンおよび前記第2の子チェーンを含み、前記第1の依存レベルが前記第2の依存レベルから独立していること、
    第1のプロセッサにより前記第1の依存レベル内の前記第1の子チェーンを処理し、かつ、第2のプロセッサにより前記第1の依存レベル内の前記第2の子チェーンを処理する第3ステップ
    を備えたことを特徴とする方法。
  2. 前記第2ステップは、前記単一計算チェーンの第5の式が、第5の支援式に依存しており、かつ、前記第5の支援式の子として他の依存式が関連付けられている場合、前記第5の式を第2の依存レベルに移動することを特徴とする請求項1に記載の方法。
  3. コンピュータシステムに請求項1または2に記載の方法を実行させるためのコンピュータシステムによって実行可能な命令を含むプログラムを記録したことを特徴とするコンピュータ読み取り可能な記録媒体
  4. コンピュータシステムに請求項1または2に記載の方法を実行させるためのコンピュータシステムによって実行可能な命令を含むプログラム
JP2009509832A 2006-05-08 2007-05-08 依存レベルを用いたマルチスレッドスプレッドシートの処理 Expired - Fee Related JP5081901B2 (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US11/430,486 US8032821B2 (en) 2006-05-08 2006-05-08 Multi-thread spreadsheet processing with dependency levels
US11/430,486 2006-05-08
PCT/US2007/011189 WO2007145742A2 (en) 2006-05-08 2007-05-08 Multithread spreadsheet processing with dependency levels

Publications (2)

Publication Number Publication Date
JP2009536766A JP2009536766A (ja) 2009-10-15
JP5081901B2 true JP5081901B2 (ja) 2012-11-28

Family

ID=38662346

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2009509832A Expired - Fee Related JP5081901B2 (ja) 2006-05-08 2007-05-08 依存レベルを用いたマルチスレッドスプレッドシートの処理

Country Status (13)

Country Link
US (1) US8032821B2 (ja)
EP (1) EP2024868B1 (ja)
JP (1) JP5081901B2 (ja)
KR (1) KR101354810B1 (ja)
CN (1) CN101438276B (ja)
AU (1) AU2007259398B2 (ja)
BR (1) BRPI0711327A2 (ja)
CA (2) CA2875086A1 (ja)
MX (1) MX2008014241A (ja)
MY (1) MY153218A (ja)
NO (1) NO20084366L (ja)
RU (1) RU2461059C2 (ja)
WO (1) WO2007145742A2 (ja)

Families Citing this family (27)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7533139B2 (en) * 2004-09-27 2009-05-12 Microsoft Corporation Method and system for multithread processing of spreadsheet chain calculations
US8032821B2 (en) 2006-05-08 2011-10-04 Microsoft Corporation Multi-thread spreadsheet processing with dependency levels
US7814052B2 (en) * 2006-11-03 2010-10-12 Salesforce.Com, Inc. Implementing formulas for custom fields in an on-demand database
US20110067015A1 (en) * 2008-02-15 2011-03-17 Masamichi Takagi Program parallelization apparatus, program parallelization method, and program parallelization program
EP2107474A1 (en) * 2008-03-31 2009-10-07 British Telecommunications Public Limited Company Data access
US8584004B2 (en) * 2008-04-23 2013-11-12 Microsoft Corporation Asynchronous user defined functions
US8255905B2 (en) 2008-06-27 2012-08-28 Microsoft Corporation Multi-threaded processes for opening and saving documents
US9037959B2 (en) * 2008-09-30 2015-05-19 Apple Inc. Formula display and search in a spreadsheet
US20110264993A1 (en) * 2010-04-23 2011-10-27 Microsoft Corporation Multi-Threaded Sort of Data Items in Spreadsheet Tables
US8527866B2 (en) * 2010-04-30 2013-09-03 Microsoft Corporation Multi-threaded sort of data items in spreadsheet tables
US20110314365A1 (en) * 2010-06-17 2011-12-22 Microsoft Corporation Decompiling loops in a spreadsheet
US9952893B2 (en) * 2010-11-03 2018-04-24 Microsoft Technology Licensing, Llc Spreadsheet model for distributed computations
US8793566B2 (en) 2010-11-10 2014-07-29 Duquesne University Of The Holy Spirit System and method for allocating, scheduling, tracking and reporting usage of training assets and facilities
US11676090B2 (en) * 2011-11-29 2023-06-13 Model N, Inc. Enhanced multi-component object-based design, computation, and evaluation
US11074643B1 (en) 2012-12-21 2021-07-27 Model N, Inc. Method and systems for efficient product navigation and product configuration
US9417890B2 (en) * 2013-04-12 2016-08-16 Microsoft Technology Licensing, Llc Compilation of transformation in recalculation user interface
US9552007B2 (en) * 2013-12-19 2017-01-24 International Business Machines Corporation Parallel technique for computing problem functions in solving optimal power flow
US9292486B2 (en) * 2014-01-08 2016-03-22 International Business Machines Corporation Validation of formulas with external sources
US9898348B2 (en) * 2014-10-22 2018-02-20 International Business Machines Corporation Resource mapping in multi-threaded central processor units
US9898440B2 (en) * 2015-02-25 2018-02-20 Sap Se Calculation framework utilizing fragmentation of expressions
US10289672B1 (en) * 2015-12-21 2019-05-14 Workday, Inc. Threading spreadsheet calculations
CN109409872A (zh) * 2017-08-17 2019-03-01 深圳市智派网络技术有限公司 电子现金的转账方法及装置
KR101985491B1 (ko) * 2017-12-11 2019-06-03 주식회사 핀인사이트 다이어그램 방식의 시각화 수식 작성을 통한 결과 생성 및 모니터링 장치
US11416262B1 (en) * 2018-05-22 2022-08-16 Workday, Inc. Systems and methods for improving computational speed of planning by enabling interactive processing in hypercubes
CA3110213A1 (en) * 2018-08-21 2020-02-27 GrowthPlan LLC Grid-based data processing with changeable cell formats
US11886916B2 (en) 2020-06-30 2024-01-30 Microsoft Technology Licensing, Llc System for adaptive multithreaded recalculation operations
CN113420537B (zh) * 2021-06-22 2023-01-31 平安科技(深圳)有限公司 电子表格数据处理方法、装置、设备及存储介质

Family Cites Families (44)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5694603A (en) * 1982-09-28 1997-12-02 Reiffin; Martin G. Computer memory product with preemptive multithreading software
US5276607A (en) * 1990-03-28 1994-01-04 Wordperfect Corporation Method for optimal recalculation
CA2074769C (en) * 1991-08-09 2001-03-20 International Business Machines Corporation Formula processor
CA2078315A1 (en) * 1991-09-20 1993-03-21 Christopher L. Reeve Parallel processing apparatus and method for utilizing tiling
JPH0744629A (ja) * 1993-07-30 1995-02-14 Nec Corp 表計算処理装置
US5943663A (en) * 1994-11-28 1999-08-24 Mouradian; Gary C. Data processing method and system utilizing parallel processing
JPH08235266A (ja) * 1995-02-23 1996-09-13 Matsushita Electric Ind Co Ltd 表計算処理方法
US6138130A (en) * 1995-12-08 2000-10-24 Inventure Technologies, Inc. System and method for processing data in an electronic spreadsheet in accordance with a data type
US6055548A (en) * 1996-06-03 2000-04-25 Microsoft Corporation Computerized spreadsheet with auto-calculator
JP2882475B2 (ja) * 1996-07-12 1999-04-12 日本電気株式会社 スレッド実行方法
US5913925A (en) * 1996-12-16 1999-06-22 International Business Machines Corporation Method and system for constructing a program including out-of-order threads and processor and method for executing threads out-of-order
US5970506A (en) * 1997-01-20 1999-10-19 Justsystem Corporation Spreadsheet-calculating system and method
US6304866B1 (en) 1997-06-27 2001-10-16 International Business Machines Corporation Aggregate job performance in a multiprocessing system by incremental and on-demand task allocation among multiple concurrently operating threads
JP3209205B2 (ja) 1998-04-28 2001-09-17 日本電気株式会社 プロセッサにおけるレジスタ内容の継承装置
US6205465B1 (en) * 1998-07-22 2001-03-20 Cisco Technology, Inc. Component extensible parallel execution of multiple threads assembled from program components specified with partial inter-component sequence information
US6349295B1 (en) * 1998-12-31 2002-02-19 Walker Digital, Llc Method and apparatus for performing supplemental searches over a network
US6957191B1 (en) 1999-02-05 2005-10-18 Babcock & Brown Lp Automated financial scenario modeling and analysis tool having an intelligent graphical user interface
US6535905B1 (en) 1999-04-29 2003-03-18 Intel Corporation Method and apparatus for thread switching within a multithreaded processor
US6560606B1 (en) * 1999-05-04 2003-05-06 Metratech Method and apparatus for processing data with multiple processing modules and associated counters
EP1109105A1 (en) 1999-12-14 2001-06-20 Sun Microsystems, Inc. Inserting a data object into a text document
EP1152331B1 (en) 2000-03-16 2017-11-22 Kabushiki Kaisha Square Enix (also trading as Square Enix Co., Ltd.) Parallel task processing system and method
EP2458511A3 (en) * 2000-06-21 2014-08-13 Microsoft Corporation System and method for integrating spreadsheets and word processing tables
US7155667B1 (en) * 2000-06-21 2006-12-26 Microsoft Corporation User interface for integrated spreadsheets and word processing tables
AUPQ836500A0 (en) * 2000-06-26 2000-07-20 Dstc Pty Ltd Parallel execution mechanism for spreadsheets
JP2002133360A (ja) 2000-10-27 2002-05-10 Mitsuyoshi Yamane 表計算処理におけるセルのレイアウトによる入出力方法及びそのプログラムを記録した記録媒体
RU2202123C2 (ru) * 2001-06-06 2003-04-10 Бачериков Геннадий Иванович Параллельная вычислительная система с программируемой архитектурой
JP3702814B2 (ja) * 2001-07-12 2005-10-05 日本電気株式会社 マルチスレッド実行方法及び並列プロセッサシステム
US7010779B2 (en) * 2001-08-16 2006-03-07 Knowledge Dynamics, Inc. Parser, code generator, and data calculation and transformation engine for spreadsheet calculations
US7028167B2 (en) 2002-03-04 2006-04-11 Hewlett-Packard Development Company, L.P. Core parallel execution with different optimization characteristics to decrease dynamic execution path
US8793176B2 (en) * 2002-06-13 2014-07-29 Cfph, Llc Systems and methods for providing a customizable spreadsheet application interface for an electronic trading system
GB0224272D0 (en) * 2002-10-18 2002-11-27 Morrow Iain Systems and method for improved data processing
US7266763B2 (en) 2002-11-26 2007-09-04 Microsoft Corporation User defined spreadsheet functions
US7207043B2 (en) 2002-12-31 2007-04-17 International Business Machines Corporation Programmatic response-time based workload distribution techniques
US7228543B2 (en) 2003-01-24 2007-06-05 Arm Limited Technique for reaching consistent state in a multi-threaded data processing system
JP4042604B2 (ja) * 2003-03-31 2008-02-06 日本電気株式会社 プログラム並列化装置,プログラム並列化方法およびプログラム並列化プログラム
US7243096B2 (en) * 2003-04-29 2007-07-10 International Business Machines Corporation Method and system in an electronic data table for managing order oriented criteria
US7530013B2 (en) * 2003-06-13 2009-05-05 Ultimate Risk Solutions, Llc Optimizer of interdependent information
US7454595B1 (en) * 2004-04-19 2008-11-18 Sandia Corporation Distributed processor allocation for launching applications in a massively connected processors complex
US7664804B2 (en) * 2004-06-01 2010-02-16 Microsoft Corporation Method, system, and apparatus for exposing workbook ranges as data sources
US7533139B2 (en) * 2004-09-27 2009-05-12 Microsoft Corporation Method and system for multithread processing of spreadsheet chain calculations
US7810032B2 (en) * 2004-12-01 2010-10-05 International Business Machines Corporation System and method for performing over time statistics in an electronic spreadsheet environment
US7451397B2 (en) * 2004-12-15 2008-11-11 Microsoft Corporation System and method for automatically completing spreadsheet formulas
US8010969B2 (en) * 2005-06-13 2011-08-30 Intel Corporation Mechanism for monitoring instruction set based thread execution on a plurality of instruction sequencers
US8032821B2 (en) 2006-05-08 2011-10-04 Microsoft Corporation Multi-thread spreadsheet processing with dependency levels

Also Published As

Publication number Publication date
CA2648875C (en) 2015-02-24
US8032821B2 (en) 2011-10-04
MX2008014241A (es) 2009-03-20
BRPI0711327A2 (pt) 2011-08-30
WO2007145742A2 (en) 2007-12-21
CA2648875A1 (en) 2007-12-21
RU2008144192A (ru) 2010-05-20
KR101354810B1 (ko) 2014-01-22
AU2007259398A1 (en) 2007-12-21
EP2024868B1 (en) 2018-02-28
JP2009536766A (ja) 2009-10-15
CA2875086A1 (en) 2007-12-21
EP2024868A2 (en) 2009-02-18
NO20084366L (no) 2008-12-05
RU2461059C2 (ru) 2012-09-10
CN101438276B (zh) 2012-09-05
KR20090018097A (ko) 2009-02-19
WO2007145742A3 (en) 2008-02-28
AU2007259398B2 (en) 2012-01-19
US20070260667A1 (en) 2007-11-08
CN101438276A (zh) 2009-05-20
EP2024868A4 (en) 2011-01-12
MY153218A (en) 2015-01-29

Similar Documents

Publication Publication Date Title
JP5081901B2 (ja) 依存レベルを用いたマルチスレッドスプレッドシートの処理
JP4698757B2 (ja) ソフトウェアトランザクションのコミット順序および競合の管理
US9959313B2 (en) Database management system and method capable of dynamically issuing inputs/outputs and executing operations in parallel
TWI442233B (zh) 使用交易以平行化循序框架之方法及用於記錄相關指令之電腦儲存媒體
US7860847B2 (en) Exception ordering in contention management to support speculative sequential semantics
TWI451340B (zh) 使用交易以平行化循序框架之方法及電腦可讀取媒體
US20080216062A1 (en) Method for Configuring a Dependency Graph for Dynamic By-Pass Instruction Scheduling
US9928105B2 (en) Stack overflow prevention in parallel execution runtime
US20120110302A1 (en) Accelerating Generic Loop Iterators Using Speculative Execution
JPH06230963A (ja) メモリアクセス制御装置

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20100304

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20120330

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20120702

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20120803

A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20120903

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20150907

Year of fee payment: 3

R150 Certificate of patent or registration of utility model

Free format text: JAPANESE INTERMEDIATE CODE: R150

S111 Request for change of ownership or part of ownership

Free format text: JAPANESE INTERMEDIATE CODE: R313113

R350 Written notification of registration of transfer

Free format text: JAPANESE INTERMEDIATE CODE: R350

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

LAPS Cancellation because of no payment of annual fees