JP2013536535A - 並列処理開発環境および関連する方法 - Google Patents

並列処理開発環境および関連する方法 Download PDF

Info

Publication number
JP2013536535A
JP2013536535A JP2013526183A JP2013526183A JP2013536535A JP 2013536535 A JP2013536535 A JP 2013536535A JP 2013526183 A JP2013526183 A JP 2013526183A JP 2013526183 A JP2013526183 A JP 2013526183A JP 2013536535 A JP2013536535 A JP 2013536535A
Authority
JP
Japan
Prior art keywords
source code
parallel processing
file
code
developer
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.)
Pending
Application number
JP2013526183A
Other languages
English (en)
Inventor
ケビン ディー. ハワード,
Original Assignee
マッシブリー パラレル テクノロジーズ, インコーポレイテッド
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 マッシブリー パラレル テクノロジーズ, インコーポレイテッド filed Critical マッシブリー パラレル テクノロジーズ, インコーポレイテッド
Publication of JP2013536535A publication Critical patent/JP2013536535A/ja
Pending legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06QINFORMATION AND COMMUNICATION TECHNOLOGY [ICT] SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES; SYSTEMS OR METHODS SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES, NOT OTHERWISE PROVIDED FOR
    • G06Q20/00Payment architectures, schemes or protocols
    • G06Q20/08Payment architectures
    • G06Q20/14Payment architectures specially adapted for billing systems
    • G06Q20/145Payments according to the detected use or quantity
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06QINFORMATION AND COMMUNICATION TECHNOLOGY [ICT] SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES; SYSTEMS OR METHODS SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES, NOT OTHERWISE PROVIDED FOR
    • G06Q10/00Administration; Management
    • G06Q10/10Office automation; Time management
    • G06Q10/105Human resources
    • G06Q10/1053Employment or hiring
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06QINFORMATION AND COMMUNICATION TECHNOLOGY [ICT] SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES; SYSTEMS OR METHODS SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES, NOT OTHERWISE PROVIDED FOR
    • G06Q40/00Finance; Insurance; Tax strategies; Processing of corporate or income taxes

Abstract

並列処理開発環境は、並列処理ルーチンを作成するように、それを通して開発者が環境にアクセスしてもよい、インターフェースを提供するグラフィカルプロセス制御サーバを有する。開発環境はまた、並列処理ルーチンの認可および使用料を管理するための財務サーバを含み、並列処理ルーチンの開発者は、ルーチンに対して受容された認可および使用料の一部分を受容する。環境は、並列処理ルーチン内の盗用および悪質ソフトウェアを識別する。

Description

本願は、2010年8月26日に出願された、米国仮出願シリアル番号第61/377,422号の利益を主張するものであり、該仮特許出願は、参照により本明細書中に援用される。
従来の並列処理ソフトウェア開発モデルは、(a)開発者に対する収益を生じない(オープンソース、GPLモデル)、(b)企業環境内で共有すること(会社または支配組織の裁量での利益共有)によって開発者に支払う、(c)プログラミング任務(コンサルティング)ごとに開発者に支払う、または(d)期間ごとに開発者に支払う(給与モデル)。これらの支払モデルは、何らかの支配会社の裁量である。したがって、開発者は、労働の報酬を完全には受けない場合がある。
支配会社自体は、典型的には、完成したアプリケーションのみに対する報酬を受容する。例外は、会社が特殊化した機能のライブラリを作成し、ライブラリ全体を販売する場合である。ソフトウェアを書くことは、たとえ同じまたは他の組織が必要機能性をすでに開発していたとしても、開発者が何度も繰り返して種々のソフトウェアコード構成要素を再開発する必要があって、非常に時間がかかる。これは、以前に作成されたソフトウェア構成要素を識別し、それらにアクセスする方法が現在ないためである。欠けているものは、1)必要なソフトウェア機能性を迅速に識別することができ、2)そのようなコードに容易にアクセスすることができ、3)基礎的ソフトウェアコードが盗用から本質的に保護され、4)発信元会社がそれらの機能性の使用から報酬を受容することができるように、複数の非関連組織からの開発者が、有用なソフトウェア機能性を共有することを可能にする、ビジネスモデルである。
現在、個人または組織は、購入者の機器に基礎的コードのコピーを置く、アプリケーションの単一のコピーを購入することができる。これは、購入者が、基礎的コードを複製し、重複コードを再パッケージ化し、元の開発組織への謝礼を伴わずに重複コードを再販することを可能にできる。アプリケーション開発中に、その競争相手と比べて性能利点があるかどうかを開発組織が知ることは、非常に困難となり得る。同様に、アプリケーションプログラム購入者は、主にアプリケーション作成組織の請求権に依存しなければならず、一対一の比較能力はほとんど利用可能ではない。アプリケーションの性能は、そのアプリケーションによって処理される特定のデータの関数となり得るため、ユーザの条件下で複数のアプリケーションの性能を比較する能力は、アプリケーション購入者にとって極度に貴重となり得て、第三者評価を通して直接利用可能ではない。
並列処理開発環境を利用する組織は、1人以上の管理者と、0人以上の開発者とを含んでもよい。組織は、並列処理開発環境を利用する従業員がいる実際の会社を表してもよく、または並列処理開発環境を使用して並列処理ルーチンを開発するように協働する個人の集合体を表してもよい。
並列処理開発環境は、クライアント/サーバベース、マルチコア、マルチサーバグラフィカルプロセス制御、コンピュータプログラム管理、およびアプリケーション構築共同システムを表す。
図1は、一実施形態における、1人以上の開発者が、処理ノードのクラスタ上で作動する並列処理ルーチンを作成し、管理することを可能にする、1つの例示的な並列処理開発環境を示す。 図2は、一実施形態における、3つのカーネルおよび別のアルゴリズムを含む、開発者によって作成された1つの例示的なアルゴリズムを示す。 図3は、図1のクラスタを使用してデータを処理するプログラムを選択することによって、ユーザがタスクを行うように図1の管理サーバのプログラムにアクセスする、1つの例示的なシナリオを示す。 図4は、試験データを処理する第1のルーチンの性能を、試験データを処理する第2のルーチンの性能と比較するための図1の開発サーバの例示的使用を示す。 図5は、一実施形態における、並列処理ルーチンのアムダールスケーリングを自動的に判定するための1つの例示的な方法を示す。 図6は、図1の環境内に記憶された1つ以上の他の並列処理ルーチンに対して、第1の並列処理ルーチンを自動的に評価するための1つの例示的な方法を図示するフローチャートである。 図7Aおよび7Bは、第1の開発者によって図1の環境に提出された例示的な第1のソフトウェアソースコードを示す。 図7Aおよび7Bは、第1の開発者によって図1の環境に提出された例示的な第1のソフトウェアソースコードを示す。 図8Aおよび8Bは、第2の開発者によって図1の環境に提出された例示的な第2のソフトウェアソースコードを示す。 図8Aおよび8Bは、第2の開発者によって図1の環境に提出された例示的な第2のソフトウェアソースコードを示す。 図9は、一実施形態における、ソフトウェアソースコードの中の盗用の割合を判定するための1つの例示的な方法を示す。 図10は、編集済み機能的構成要素へのソフトウェアソースコードの編集のための1つの例示的な編集プロセスを示す。 図11、12、13、および14は、図8Aおよび8Bのソフトウェアソースコードの関数の例示的な関数表および変数表を示す。 図11、12、13、および14は、図8Aおよび8Bのソフトウェアソースコードの関数の例示的な関数表および変数表を示す。 図11、12、13、および14は、図8Aおよび8Bのソフトウェアソースコードの関数の例示的な関数表および変数表を示す。 図11、12、13、および14は、図8Aおよび8Bのソフトウェアソースコードの関数の例示的な関数表および変数表を示す。 図15は、書式設定、コメント、変数名、およびファイル名を除去することによって、図8Aおよび8Bのソースコードから生成された1つの例示的なソース比較ファイルを示す。 図16は、図15のソース比較ファイル内の関数をサイズの昇順で順序付けることによって生成された1つの例示的なソース比較ファイルを示す。 図17、18、および19は、それぞれ図8Aおよび8Bのソフトウェアソースコードから生成された、第1の関数「power」、第2の関数「power1」、および第2の関数「main」に対する例示的な構成要素編集ファイルを示す。 図17、18、および19は、それぞれ図8Aおよび8Bのソフトウェアソースコードから生成された、第1の関数「power」、第2の関数「power1」、および第2の関数「main」に対する例示的な構成要素編集ファイルを示す。 図17、18、および19は、それぞれ図8Aおよび8Bのソフトウェアソースコードから生成された、第1の関数「power」、第2の関数「power1」、および第2の関数「main」に対する例示的な構成要素編集ファイルを示す。 図20、21、22、および23は、それぞれ図7Aおよび7Bのソフトウェアソースコードから生成された、1つの例示的な第2の関数表、および3つの第2の変数表を示す。 図20、21、22、および23は、それぞれ図7Aおよび7Bのソフトウェアソースコードから生成された、1つの例示的な第2の関数表、および3つの第2の変数表を示す。 図20、21、22、および23は、それぞれ図7Aおよび7Bのソフトウェアソースコードから生成された、1つの例示的な第2の関数表、および3つの第2の変数表を示す。 図20、21、22、および23は、それぞれ図7Aおよび7Bのソフトウェアソースコードから生成された、1つの例示的な第2の関数表、および3つの第2の変数表を示す。 図24は、書式設定、コメント、変数名、およびファイル名を除去することによって、図7Aおよび7Bのソフトウェアソースコードから生成された1つの例示的なソース比較ファイルを示す。 図25は、図24のソース比較ファイル内の関数を昇順で順序付けることによって生成された1つの例示的なソース比較ファイルを示す。 図26、27、および28は、それぞれ図7Aおよび7Bのソフトウェアソースコードから生成された、関数「power」、「power1」、および「main」に対する例示的なソース比較ファイルを示す。 図26、27、および28は、それぞれ図7Aおよび7Bのソフトウェアソースコードから生成された、関数「power」、「power1」、および「main」に対する例示的なソース比較ファイルを示す。 図26、27、および28は、それぞれ図7Aおよび7Bのソフトウェアソースコードから生成された、関数「power」、「power1」、および「main」に対する例示的なソース比較ファイルを示す。 図29は、ソフトウェアソースコードファイルから生成された例示的なデータファイルを示す。 図30は、コードブロック、独立文、および従属文を図示する、例示的なソフトウェアソースコードの断片を示す。 図31Aは、図16および25のソース比較ファイルのうちのそれぞれの最初の19文字の間の合致を図示する、1つの例示的な表を示す。 図31Bは、図31Aの表へのNeedleman−Wunsch方程式の適用に起因する、例示的な表を示す。 図31Cは、間隙検出のための規定を図示する、例示的なSmith−Watermanドット表を示す。 図31D−Fは、バージョンXと既存のソフトウェアソースコードとの間の盗用率合致を図示する、例示的なシナリオを示す。 図31D−Fは、バージョンXと既存のソフトウェアソースコードとの間の盗用率合致を図示する、例示的なシナリオを示す。 図31D−Fは、バージョンXと既存のソフトウェアソースコードとの間の盗用率合致を図示する、例示的なシナリオを示す。 図32は、一実施形態における、ソフトウェアソースコード内の悪質ソフトウェア挙動を検出する時に使用される例示的なファイルを示す。 図33は、開発者によって図1の環境に提出された例示的なソフトウェアソースコードを示す。 図34は、増補ソースコードを形成するように図33のソフトウェアソースコードを改正するための1つの例示的なプロセスを示す。 図35は、追跡ファイルを作成し、開くための1つの例示的なコード挿入を示す。 図36は、現在の日付および時間ならびに区分番号を追跡ファイルに添付するように関数を呼び出す、1つの例示的なコード挿入を示す。 図37は、追跡ファイルを閉じるための1つの例示的なコード挿入を示す。 図38Aおよび38Bは、図33のソフトウェアソースコード内の例示的なコード挿入を示す。 図38Aおよび38Bは、図33のソフトウェアソースコード内の例示的なコード挿入を示す。 図39は、図33のソフトウェアソースコード内の例示的なコメント挿入を示す。 図40Aおよび40Bは、実行時に変数の開始アドレスを判定するように、図32の増補ソースコード内の可変アドレス検出コードの例示的な配置を示す。 図40Aおよび40Bは、実行時に変数の開始アドレスを判定するように、図32の増補ソースコード内の可変アドレス検出コードの例示的な配置を示す。 図41は、変数情報を記憶するための1つの例示的な追跡表を示す。 図42は、現在のアドレス検出関数の出力を図示する、1つの例示的な表を示す。 図43は、1つの例示的な割り付けられたリソースの表を示す。 図44Aおよび44Bは、図32の増補ソースコードへの例示的な増補を示す。 図44Aおよび44Bは、図32の増補ソースコードへの例示的な増補を示す。 図45Aおよび45Bは、条件付き分岐強制を伴う図32の増補ソースコードを示す。 図45Aおよび45Bは、条件付き分岐強制を伴う図32の増補ソースコードを示す。 図46は、1つの例示的な関数・構造図を示す。 図47Aおよび47Bは、返信された、以前に実行された区分番号を評価し、「goto」コマンドを条件付きで実行するタグおよびコードを含むための図32の増補ソースコードの例示的な改正を示す。 図47Aおよび47Bは、返信された、以前に実行された区分番号を評価し、「goto」コマンドを条件付きで実行するタグおよびコードを含むための図32の増補ソースコードの例示的な改正を示す。 図48は、カーネルおよびアルゴリズムを示す、1つの例示的なアルゴリズムトレース表示を示す。 図49は、環境を利用する開発者、管理者、および組織に補助サービスを提供する、補助リソースサーバを伴う図1の環境を示す。 図50は、ソフトウェアコード文で見出されるコードの並べ替えられた複数のインスタンスを生成するための例示的な方法を示すフローチャートである。
図1は、1人以上の開発者が、処理ノード113のクラスタ112上で作動する並列処理ルーチンを作成し、管理することを可能にする、1つの例示的な並列処理計算開発環境100を示す。並列処理ルーチンは、(a)1つ以上のカーネルおよび(b)1つ以上のアルゴリズムのうちの一方または両方から成る。本明細書で使用されるように、「カーネル」は、クラスタ112の1つ以上の処理ノード113によって実行された時に、データを処理するように特定の機能を果たす、ソフトウェアモジュールである。
環境100は、それを通して1人以上の開発者152が同時に環境100にアクセスしてもよい、インターネット150へのインターフェースを提供する、グラフィカルプロセス制御サーバ104を含む。環境100はまた、カーネル122、アルゴリズム124、組織126、ユーザ128、データベース130、および使用情報132用の1つ以上のデータベースも含む。環境100の開発サーバ108は、グラフィカルプロセス制御サーバ104およびデータベース106と協働して、カーネル122およびアルゴリズム124の作成および維持を促進する。環境100のプログラム管理サーバ110は、1つ以上のアルゴリズム124およびカーネル122を実行するように、環境100のクラスタ112へのアクセスを促進する。
図1に図示されるように、開発者152は、これらの開発者によって作成されるカーネル122およびアルゴリズム124が、各組織154のために構成される制御に基づいて組織化され、アクセスされるように、組織154にグループ化されてもよい。各組織154はまた、組織154内の各作成されたカーネルおよびアルゴリズムへのアクセス、およびその費用を制御する、1人以上の管理者158を含んでもよい。例えば、開発者152(1)によって作成される各カーネルは、管理者158(1)によって試験され、承認され、次いで、組織154(2)内の開発者152(3)、152(4)による等、他の組織内の開発者による使用のために公開される。管理者158は、組織154内の開発者152によって作成される各カーネル122およびアルゴリズム124に対する認可料および使用費用を定義してもよい。
図1に示されるように、クラスタ112の処理ノード113は、並行して1つ以上の並列処理ルーチンを処理するためのハワードカスケードに形成されてもよい。
開発サーバ108は、開発者152が、グラフィカルプロセス制御サーバ104との相互作用を通して、環境100内で試験するためにカーネルおよび/またはアルゴリズムを提出することを可能にする。開発サーバ108は、データベース106内で、開発者152および組織154と関連して受容したカーネルおよびアルゴリズムを記憶する。一実施形態では、データベース106は、関係型データベースおよびファイル記憶を表す。付加的な制御情報は、各カーネルおよびアルゴリズムのアクセスおよび費用を定義する、これらのカーネルおよびアルゴリズムと関連して、データベース106内で(例えば、示されていない別個のデータベース表内で)記憶される。
環境100はまた、組織カーネルおよびアルゴリズムのうちのそれぞれに対して受容される認可料および使用料に基づいて、支払いを組織154、管理者158、および開発者152に提供する、財務サーバ102も含む。例えば、組織154(1)の開発者152(1)によって開発されたカーネル122は、組織154(2)の開発者152(3)によって開発されたアルゴリズム124に組み込まれてもよい。カーネル122に対する管理者158(1)によって定義される認可料は、組織154(2)によって支払われ、認可料の第1の部分は、開発者152(1)に分配され、認可料の第2の部分は、管理者158(1)に分配され、認可料の第3の部分は、組織154(1)に分配される。認可料の第4の部分は、環境100の使用の支払いとして、財務サーバ102によって得られてもよい。つまり、環境100は、各開発者および管理者に対する接続および使用時間を請求しなくてもよいが、代わりに、各カーネルおよびアルゴリズムと関連付けられる認可料および使用料の割合に基づいて、経済的補償を受容する。同様に、開発されたアルゴリズムは、環境100を通して他の組織へ販売されてもよく、販売からの収益は、所有組織、その管理者、およびその開発者に分配されてもよく、環境100は全体的な販売価格の割合を受容する。
データベース106内の各カーネル122およびアルゴリズム124は、環境100内の各カーネルおよびアルゴリズムを分類する、定義されたカテゴリおよび一式のキーワードを有する。カテゴリは、「相互通信」、「画像処理」、「mmoゲーム用ツール」等を含んでもよい。付加的なキーワードが、必要なパラメータおよびデータ出力形式等のそれらの特徴を詳細に定義するように、各カーネルおよびアルゴリズムと関連付けられてもよい。データベース106内に記憶されたカーネルおよびアルゴリズムは、カテゴリおよび/または1つ以上のキーワードを入力する開発者によって選択されてもよい。
図2は、これらのカーネル204(1)、204(2)、および204(3)から開発者252(5)によって作成される1つの例示的なアルゴリズム222、および別のアルゴリズム202(1)を示す。カーネル204(1)は、開発者252(1)によって作成され、カーネル204(2)および204(3)は、開発者252(2)によって作成され、アルゴリズム202(1)は、開発者252(3)によって作成され、開発者252(4)によって作成されるカーネル204(4)を含む。
各カーネル(例えば、カーネル204)は、図1のクラスタ112上で作動し、1人以上の開発者152によって開発される、ソフトウェアルーチンを表す。アルゴリズム(例えば、アルゴリズム202(1))は、クラスタ112上で作動する時に所望の機能を提供するように組み合わせられる、1つ以上のカーネルおよび/または他のアルゴリズムを表す。カーネル204およびアルゴリズム202は、それぞれ、図1のカーネル122およびアルゴリズム124を表してもよい。各カーネル204およびアルゴリズム202は、カーネル/アルゴリズムが使用される度に支払われる、定義された使用費用210と、カーネル/アルゴリズムの定義された認可期間に支払われる、定義された認可費用208とを有する。
図2の実施例では、アルゴリズム222は、カーネル204(1)、204(2)、204(3)、およびアルゴリズム202(1)を組み合わせることによって作成される。アルゴリズム222は同様に、認可された時に他のアルゴリズム内に含まれてもよい。矢印212は、カーネル204とアルゴリズム202(1)との間のデータフローを表す。図2に示されるように、アルゴリズム222は、定義されたカテゴリ206と、認可費用208と、使用費用210とを有する。随意で、キーワードはまた、他の開発者によるアルゴリズム222の選択を促進するように、アルゴリズム222と関連付けられてもよい。アルゴリズム222が、カーネル204と、アルゴリズム202(1)とを含むため、認可費用208(6)は、認可費用208(1)、208(2)、208(3)、および208(4)の合計に等しい、またはそれよりも大きい。同様に、使用費用210(6)は、使用費用210(1)、210(2)、210(3)、および210(4)の合計に等しい、またはそれよりも大きい。同様に再度、使用費用210(4)は、カーネル204(4)の使用費用210(5)に等しく、またはそれよりも大きく、認可費用208(4)は、カーネル204(4)の認可費用208(5)に等しい、またはそれよりも大きい。
一実施形態では、環境100は、新しいアルゴリズムの作成時に、使用費用および認可費用が、それぞれ、その中に含まれる構成要素の使用費用および構成要素費用の合計に等しい、またはそれよりも大きいことを確実にする。具体的には、アルゴリズム222が認可(または使用)された時に、環境100は、その中に含まれる各カーネル204およびアルゴリズム202の開発者152が、アルゴリズム222に支払われる認可料220および/または使用料230の適切な部分を受容することを確実にする。
アルゴリズム222を作成する時に、開発者152は、その中で使用される各カーネル204およびアルゴリズム202に対する認可を必要とする。したがって、開発者152は、これらのカーネルおよびアルゴリズムのうちのそれぞれに対する認可が開発者152によってすでに保持されていない限り、各カーネル204および/またはアルゴリズム202の新しい認可を支払う。環境100は、開発者152が新しいアルゴリズム内に任意の選択されたカーネル204および/またはアルゴリズム202を含むことを可能にする前に、開発者152が任意の必要な認可費用208を支払うことを確実にするように動作する。
いったん新しいカーネルまたはアルゴリズムが作成されると、作成組織内で使用するために非公開のままであってもよく、または他の組織内の開発者による使用のために公開されてもよい。一実施形態では、各クライアント156内の図1のユーザインターフェース160は、そのクライアントでログインした開発者152に利用可能なカーネル204およびアルゴリズム202のみを表示する。ユーザインターフェース160は、付属書A内で詳細に説明される。
環境100は、カーネル204およびアルゴリズム202、222の認可および使用を制御し、それらの実収使用および認可料を追跡し、それにより、開発者が開発されたルーチンおよびアルゴリズムからの収入を共有することを可能にする。さらに、開発されたソフトウェアの共有および再利用が、認可料および使用料の自動制御および支払いを通して、環境100によって促され、報酬を受ける。
並列処理アルゴリズム(例えば、カーネルおよびアルゴリズム)を作成し、公開するように開発者を促すために、環境100は、環境100によって提供される施設の使用の代金を開発者に請求しない。むしろ、環境100は、認可および使用される際に、各カーネルおよびアルゴリズムによって得られる、一定の割合の使用料および認可料を保持する。この料金は、要求された収入の流れが妨げられないままであるように、他の料金に追加される。
図3は、クラスタ112を使用してデータ306を処理するプログラム304を選択することによって、ユーザ352がタスク302を行うように環境100のプログラム管理サーバ110にアクセスする、1つの例示的なシナリオ300を示す。プログラム管理サーバ110は、例えば、開発者152によってクラスタ112上で作動するために開発される、複数の(例えば、データベース106内に)記憶された並列処理ルーチン(例えば、カーネルおよびアルゴリズム)からのプログラム304の選択を可能にするように、インターネット150を介してユーザ352と相互作用する、グラフィカルインターフェースを提供してもよい。プログラム管理サーバ110は、各プログラムについて、データベース106内に記憶され、ユーザ352が、費用および性能とともにデータ処理要件に基づいて、プログラム304の知識に基づく選択を行ってもよいように、詳細な費用および機能性情報をユーザ352に提供してもよい。ユーザ352は、インターネット150を介してデータ306を環境100にアップロードし、またはデータ306をクラスタ112に提供するための他の手段を使用してもよい。
データ306を処理するようにクラスタ112上でプログラム304を実行すると、プログラム管理サーバ110は、プログラム304の使用費用に基づいてユーザ352によって支払い可能である、適切な使用料320、データ306のサイズおよび種類、プログラム304を実行するために選択されるクラスタ112の処理ノード113の数を判定する。プログラム管理サーバ110は、財務サーバ102が、プログラム304の構成要素に基づいて、開発者152に対する支払い322を判定してもよいように、使用料320について財務サーバ102に知らせてもよい。図2および3の実施例を使用して、プログラム304は、アルゴリズム222、したがって、カーネル204(1)、204(2)、204(3)、および204(4)の開発者152を含み、アルゴリズム202(1)およびアルゴリズム222の開発者は、それぞれ、各含まれた構成要素の定義された使用費用210に基づいて、使用料320の適切な部分(支払い322(1)−322(5)として示される)を受容する。財務サーバ102は、クラスタ112上で実行される各プログラム(例えば、プログラム304)の中の構成要素の使用に基づいて、各開発者152への支払いを得る。
財務サーバ102はまた、開発者152(1)−(5)がアルゴリズム222に貢献したため、これらの開発者による環境100の使用の支払いとして、ある割合の使用料320を保留する。ユーザ352は、特定のタスクのために、より高い性能の処理を選択し、環境100から、そのより高い性能に対する特別料金を支払ってもよい。より高い性能の処理のために選択されるタスクは、クラスタ112の付加的な処理ノードを利用してもよく、または優先順位の低いタスクノード要求に優先して、ノードがタスクに割り付けられることを確実にする、より高い優先順位を有してもよい。このより高い性能の処理に対する支払いは、環境100の使用の代金を支払うためだけに使用され、開発者には支払われない。
環境100内に記憶された並列処理ルーチン(例えば、カーネルおよびアルゴリズム)およびデータベース(例えば、図1のデータベース130)は、組織、その組織内のカテゴリ、および所与の名前によって分離される。動作の一実施例では、開発者152は、最初に、ユーザインターフェース160から組織を選択し、次いで、カテゴリを選択し、次いで、所望の並列処理ルーチンおよび/またはデータベースの名前を選択する。開発者152はまた、特定の組織およびカテゴリについてユーザインターフェース160内で表示される、並列処理ルーチンおよびデータベースの数を限定する、キーワードリストをユーザインターフェース160内で定義してもよい。
「Massively Parallel Technologies」は、ユーザインターフェース160のボタンまたは制御上で「MPT」と略称されてもよい、1つの例示的な組織名である。組織名がユーザインターフェース160内で略称される場合、開発者が略称上にマウスを「合わせる」と、完全な組織名が表示される。組織内で、例示的なカテゴリは、「相互通信」、「画像処理」、および「mmoゲーム用ツール」である。これらのカテゴリは、いったん組織が選択されると、ユーザインターフェース160内に現れる。例示的な並列処理ルーチン名は、「PAAX交換」、「FAAX交換」、および「ハワードカスケード」である。
動作の一実施例では、開発者152(5)は、最初に、組織154(3)の名前「MPT」を選択し、次いで、カテゴリ相互通信を選択し、次いで、ハワードカスケードと呼ばれるカーネルを選択する。開発者152(5)は、次いで、試験データセットに基づいて特性を判定するように、新しいアルゴリズムまたはプロファイル内に選択されたカーネルを含んでもよい。
図4は、試験データ406を処理する第1のルーチン404(1)の性能を、試験データ406を処理する第2のルーチン404(2)の性能と比較するための開発サーバ108の例示的な使用を示す。試験データ406は、環境100内に存在してもよく、または開発者152によってアップロードされてもよい。第1のルーチン404(1)および第2のルーチン404(2)は、図1および2のカーネル122、204および/またはアルゴリズム124、202、222のインスタンスを表してもよい。第1のルーチン404(1)および第2のルーチン404(2)は、両方とも同じ機能を果たし、同じ入力および出力パラメータを有するという点で同様であるが、異なるカーネルおよび/またはアルゴリズムを含んでもよい。ルーチン404は、同じカテゴリの範囲内に入り、同様のキーワード記述子を有してもよい。
開発サーバ108は、それぞれ、第1のルーチンプロファイル408(1)および第2のルーチンプロファイル408(2)を判定するように、第1のルーチン404(1)および第2のルーチン404(2)のうちのそれぞれのプロファイルを作成する。各ルーチンプロファイル408は、使用されるRAMの量410、通信モデル412、第1および第2の処理速度414、およびアムダールスケーリング416のうちの1つ以上を含む。一実施形態では、1つのルーチンプロファイル408は、ルーチン404に選択された各通信モデル412のために作成される。特定の通信モデルの選択は、各利用可能な通信モデルを使用して、ルーチンのプロファイルを作成することに起因してもよく、またはユーザによって行われてもよい。
動作の一実施例では、開発サーバ108は、試験データ406を処理するようにクラスタ112の単一の処理ノード上で作動する、第1のルーチン404(1)のプロファイルを作成し、試験データを処理する第1のルーチンの実行時間に基づいて、使用されるRAM410(1)、通信モデル412(1)、および第1の処理速度414(1)を導出する。開発サーバ108は、次いで、試験データ406を処理するようにクラスタ112の10個の処理ノード上で作動する、第1のルーチン404(1)のプロファイルを作成し、第2の処理速度414(3)を導出する。処理速度および実行時間は、処理ノードの計算能力ではなく、並列処理ルーチンの処理性能を表すために、本明細書で交換可能に使用される。例えば、第1の処理速度414(1)は、クラスタ112の単一の処理ノード上で第1のルーチン404(1)によって試験データ406を処理するための実行時間を表す。次いで、開発サーバ108は、以下の図5に関連して説明されるように、第1の処理速度414(1)、判定された第2の処理速度414(3)、および第2の処理速度414(3)を判定するために使用される処理ノードの数(N)に基づいて、アムダールスケーリング416(1)を判定する。次いで、開発サーバ108は、第2のルーチンプロファイル408(2)を判定するように、第2のルーチン404(2)についてこのシーケンスを繰り返す。
最も適切なカーネルおよびアルゴリズムの使用を促すため、および開発者が新たに作成されたカーネルおよび/またはアルゴリズムを評価することを可能にするために、特定のタスクに対する最良のカーネル/アルゴリズムが、識別され、そのタスクに組み込まれてもよいように、環境100は、開発者またはユーザがカーネルおよびアルゴリズムを相互に対して比較することを可能にする。データセットのサイズ、カーネルおよび/またはアルゴリズムに入力されるパラメータ、カーネルおよび/またはアルゴリズムを処理するために選択される処理ノードの数、ならびにカーネルおよび/またはアルゴリズムのアムダールスケーリングを含むが、それらに限定されない、多くの要因が、特定のタスクに対するカーネルおよび/またはアルゴリズムの適合性を判定する。
一実施形態では、特に、各開発者が、処理仕様および要件に合わせられた独自の試験データを利用してルーチンを評価するため、並列処理ルーチンを評価するための条件が、典型的には変化するので、環境100は、データベース106内にルーチンプロファイル408を保存しない。環境100は、開発者がデータ要件に基づいて最適なカーネルおよびアルゴリズムを選択することを可能にするように、試験データおよび入力パラメータに対する新規および既存の並列処理ルーチンの自動評価を促進する。別の実施形態では、入力パラメータおよび試験データが変化していない時に、開発者が1回以上ルーチンのプロファイルを作成する必要がないように、環境は、試験データ406および評価開発者152に関するルーチンプロファイル408を記憶する。
図5は、例えば、カーネルおよびアルゴリズム等の並列処理ルーチンのアムダールスケーリングを自動的に判定するための1つの例示的な方法500を示す。アムダールスケーリングは、図1のクラスタ112内の複数の処理ノード113によって実行された時等に、複数の処理ノード上で実行されるルーチンの性能が予測されることを可能にする。方法500は、開発サーバ108および処理ノード113のうちの1つ以上によって実装される。
方法500のステップ502では、ルーチンが、第1の実行時間を得るように単一の処理ノード上でプロファイル作成される。ステップ502の一実施例では、開発サーバ108は、第1の処理速度414(1)を判定するように、クラスタ112の単一の処理ノード内で試験データ406を処理する、第1のルーチン404(1)のプロファイルを作成する。ステップ504では、N個の処理ノード上のルーチンの予測実行時間が、第1の実行時間/Nとして計算され、Nは、プロファイリングに使用される処理ノードの数である。ステップ504の一実施例では、10個の処理ノード113が、ステップ506でルーチン404(1)のプロファイルを作成するために使用され、したがって、Nは10に等しく、10で割った第1の処理速度414(1)として予測実行時間を求める。ステップ506では、ルーチンが、第2の実行時間を判定するようにN個の処理ノード上でプロファイル作成される。ステップ506の一実施例では、開発サーバ108は、第2の処理速度414(3)を判定するように、クラスタ112の10個の処理ノード113上で試験データ406を処理する、ルーチン404(1)のプロファイルを作成する。ステップ508では、アムダールスケーリングが、予測実行時間/第2の実行時間として計算される。ステップ508の一実施例では、10個の処理ノード113がステップ506で使用されたため、第1の処理速度414(1)は、10で割られ、次いで、この結果を第2の処理速度414(3)で割る。第1の実行時間が10秒であり、第2の実行時間が5秒である場合、アムダールスケーリング因数は0.5である。1というアムダールスケーリング因数が理想的であり、並列処理ルーチンは、より小さいアムダールスケーリング因数を伴うルーチンよりも効率的に1つの尺度に近い、アムダールスケーリング値を有する。
図6は、環境100内に記憶された1つ以上の他の並列処理ルーチンに対して第1の並列処理ルーチンを自動的に評価するための1つの例示的な方法600を図示する、フローチャートである。ステップ602では、第1の並列処理ルーチンが、一式の試験データを使用してプロファイル作成される。ステップ602の一実施例では、ルーチン404(1)は、開発者152(1)によって作成され、図5の方法500および試験データ406を使用して開発サーバ108によってプロファイル作成される。ステップ604では、同様の並列処理ルーチンが、第1の並列処理ルーチンに対して定義されるカテゴリおよび/またはキーワードに基づいて選択される。ステップ604の一実施例では、開発サーバ108は、データベース106内の他の同様のカーネルおよびアルゴリズムを選択するために、ルーチン404(1)に対する定義されたカテゴリおよびキーワードを利用する。
ステップ606では、各選択された同様の並列処理ルーチンが、試験データを使用してプロファイル作成される。ステップ606の一実施例では、開発サーバ108は、試験データ406を処理する第2のルーチン404(4)のプロファイルを作成するために方法500を利用し、ルーチンプロファイル408(2)を生成する。ステップ608では、選択された同様の並列処理ルーチンに対して第1の並列処理ルーチンをランク付けするように、第1の並列処理ルーチンのプロファイルデータが、選択された同様の並列処理ルーチンのうちのそれぞれのプロファイルデータと比較される。並行スケーリングの効率が非常に重要である、ステップ608の一実施例では、開発サーバ108は、第2のルーチンプロファイル408(2)に対して第1のルーチンプロファイル408(1)を比較し、各ルーチンプロファイル408内のアムダールスケーリング416に基づいて、第2のルーチン404(2)に対して第1のルーチン404(1)をランク付けする。ステップ610では、次いで、選択された既存のルーチンの通信モデルが判定される。
随意で、開発者152は、ステップ608のランキングに影響を及ぼすように、ルーチンプロファイル408の要素に優先順位を付けてもよい。例えば、使用される最大量のRAMが、処理されているデータのサイズに基づく、特定の用途について、より少ないRAMを利用するアルゴリズムは、最高速の処理速度を伴うアルゴリズムよりも貴重であってもよい。したがって、開発サーバ108が、方法600のステップ608で、他のプロファイル作成された特性を上回る、使用される最低RAM410の値を伴うカーネルをランク付けするように、開発者152は、ルーチンプロファイル408内の最高優先順位の要素として、使用されるRAM410を定義してもよい。
動作の一実施例では、開発者152は、試験データ406を使用して、環境100内の同様の機能性を伴う既存のカーネルに対して新しいカーネルを評価するために、環境100を使用する。開発サーバ108は、新しいカーネルに対して開発者152によって定義されるカテゴリおよび定義されたキーワードのうちの一方または両方に基づいて、データベース106からカーネルを選択する。開発サーバ108は、図6の方法600を使用して、新しいカーネル、および試験データ406を使用するこれらの選択されたカーネルのうちのそれぞれのプロファイルを作成する。次いで、開発サーバ108は、判定されたルーチンプロファイル(例えば、ルーチンプロファイル408)を開発者152に提示する。開発者152が、選択されたカーネルと同様の機能を果たすために、より効率的な内部アルゴリズムを利用する、改良型カーネルを作成した場合、開発者152は、既存のカーネルに対して新しいカーネルの性能を比較し、それにより、新しいカーネルを評価してもよい。
(ソフトウェア盗用検出)
悪徳ソフトウェア開発者は、別の開発者によって開発されたコンピュータコードおよびアイディアをコピーし(またはその近い模造品を使用し)、この複製コードを独創的な作品として提示する場合がある。ソフトウェアは、容易に複製され、したがって、その価値を容易に傷つけることができる。ソースコードは、その機能性を変えることなく、全体的な発見および置換方法を使用して、および/またはソースコード内の関数の順序を再編成することによって、容易に修正される。これらの修正を組み合わせることによって、初心者がソフトウェア盗用を認識することは困難である。
以下の実施例では、「C」ソフトウェア言語が使用されるが、その範囲から逸脱することなく、他のソフトウェア言語が、「C」ソフトウェア言語の代わりに使用されてもよい。さらに、ソフトウェアソースコードのコンパイラによって無視される書式設定の量は、ソフトウェア言語の間で変化し、コンパイルされたコードに影響を及ぼさない書式設定のみが、以下の方法論で除去される。
図7Aおよび7Bは、第1の並列処理ルーチンの一部として、第1の開発者によって図1の環境100に提出された例示的な第1のソフトウェアソースコード700を示す。図8Aおよび8Bは、第2の並列処理ルーチンの一部として、第2の開発者によって図1の環境100に提出された例示的な第2のソフトウェアソースコード800を示す。この実施例では、第2の開発者は、第1のソフトウェアソースコード700を盗用し、変数名に変更を行い、第2のソフトウェアソースコード800を形成するように関数の順序を再編成している。図8Aおよび8B内で、変更は、図示を明確にするために太字フォントで示されている。
機能的に、第1のソフトウェアソースコード700と第2のソフトウェアソースコード800との間に違いはないが、これは、第2のソフトウェアソースコード800を第1のソフトウェアソースコード700と比較する時に、即時に明白ではない。さらに、第1のソフトウェアソースコード700内の関数の順序と比較して、第2のソフトウェアソースコード800内の関数の順序が並べ替えられるため、第2のソフトウェアソースコード800のコンパイルされたコードは、第1のソフトウェアソースコード700のコンパイルされたコードとは異なり、コンパイルされたコードは、盗用を識別するように直接比較することができない。これらの実施例では、「C」言語は、大文字と小文字を区別し、これは、大文字と小文字の違いが合致することを要求する。他のソフトウェア言語は、大文字と小文字を区別せず、そのような言語をサポートする実施形態では、大文字と小文字の違いを無視するように、全て小文字(または全て大文字)に変換されてもよい。
環境100は、提出された並列処理ルーチン(例えば、カーネル112およびアルゴリズム124)内の盗用を識別するための盗用検出モジュール(PDM)109を含む。PDM109は、開発サーバ108内で例証的に示されているが、PDM109は、その範囲から逸脱することなく、他のサーバ(例えば、プログラム管理サーバ110および財務サーバ102)内で実装されてもよい。PDM109はまた、環境100の外部のソフトウェア盗用を識別するための別個のツールとして実装されてもよい。
さらなる実施例では、悪徳開発者は、盗用を隠そうとして、ソフトウェアソースコード内の独立文の順序を変更する。図30は、コードブロック3002、3004、および3006、独立文3010、3012、および3014、ならびに従属文3030、3032、および3034を図示するように、例示的なソフトウェアソースコード3000の断片を示す。
図50は、ソフトウェアコード文で見られるコードの並べ替えられた複数のインスタンスを生成するための例示的な方法を示すフローチャートである。図50に示されるように、ステップ5005では、ソフトウェアコード文のグループが、それらを分離するルーピングまたは分岐文を伴わずに、2つ以上のコード文を含むブロックにグループ化される。「C」言語では、分岐の実施例は、「goto...label」、「if...then...else...」、「switch...case...default...」、「break」、および「continue」である。「C」言語では、ルーピングの実施例は、「for...」、「while...」、および「do...while...」である。
ステップ5010では、どの代入文がブロック内で従属しているか、およびどれが独立しているかを判定するように、ブロック内の代入文が分析される。「C」言語の中には、片面および両面といった2種類の代入文がある。片面代入文は、変数に関連して、それぞれ、インクリメントおよびデクリメント演算子「++」および「-−」を利用する。例えば、「a++;」は、「a=a+1;」と同等の代入文である。両面代入文は、「=」、「/=」、「*=」、「+=」、「-=」、「&=」、「|=」、「^=」、「<<=」、および「>>=」といった演算子のうちの1つを含む。例えば、「a=a+1」は、両面代入文である。上記の片面代入文で示される変数は、代入文の左および右側の両方で生じるものとして見なされる。コードブロック内の代入文の右側で見られる変数が、同じブロック内の任意の先行代入文(実際または暗示)の左側でも見られる場合に、その文は従属していると見なされる(例えば、従属文3030、3032、および3034)。同じブロック内で、代入後の任意の非代入文は、その代入文と関連付けられると見なされる(例えば、独立文3010および3012)。
次いで、ステップ5015では、以下の規則に従って、元のソフトウェアソースコードと同じ機能性を維持しながら、ソフトウェアソースコードの複数のインスタンス2910*(「*」が特定のインスタンスを示すワイルドカードである、図29に示される)が作成される。
ブロック内で従属しているものとして判定されない文は、独立文と見なされ、そのような配置が、独立文を従属文に変化させない、または従属文の従属関係を変化させないならば(すなわち、配置がブロック内のいずれの文の従属関係にも影響を及ぼさない限り)、任意の関連文とともに、所与のコードブロック内のどこかに配置される。文の従属関係は、その左側に変数を含有する独立文(実際または暗示)が、その左側の変数に依存する文と交換される場合に変化する。従属文は、独立文を定義した後に生じなければならない。従属文には、関連文がない。各ソフトウェアソースコードインスタンスは、それぞれのコードブロック内の独立文の1つの順列を表す。
コードブロック3006、および独立コード文を位置付けるための上記の規則を見ると、含まれた文の1つだけの他の順列がある。つまり、独立文3010および3012が位置を交換してもよいが、文の「++i」部分が、独立文3010または3012をそこから従属させるため、独立文3014は移動することができない。独立文3014は、それらの従属関係が違反されるため、従属文3030、3032、および3034のうちのいずれかと交換することができない。
一実施形態では、ステップ5020では、「#」がインスタンス番号を表す、ソースファイル名+「_#」+「.c(cpp)」というファイル名形式を使用して、可動独立文の順列から生成される各新しいコードインスタンス2910*が、別個のファイルとして記憶される。例えば、元のソフトウェアソースコードファイルが「a.c」と名付けられた場合、第1の新しいソフトウェアソースコードインスタンスファイル名は「a_1.c」として生成される。
図29は、ソフトウェアソースコード2902から生成された例示的なデータを示す。ソフトウェアソースコード2902は、図1のカーネル122、アルゴリズム124、図2のカーネル204、アルゴリズム202、図4の並列処理ルーチン404、図7Aおよび7Bのソフトウェアソースコード700、ならびに図8Aおよび8Bのソフトウェアソースコード800に対するソースコードのうちの1つ以上を表してもよい。
図9は、ソフトウェアソースコードの中の盗用の割合を判定するための1つの例示的な方法900を示す。例えば、開発者は、図1のカーネル122およびアルゴリズム124等の新しい並列処理ルーチンを環境100に提出してもよい。環境100内で使用するために公開する前に、この新しいアルゴリズムは、新しいルーチンの独創性を確保するように、環境100内の既存の並列処理ルーチンに対して評価される。一意的であると考えられるようにソフトウェアソースコードが改変され得る容易性を考慮して、既存のルーチンへの類似性の量を判定するように、変数名、ファイル名、およびコメントを除外して、提出されたソフトウェアソースコードが比較される。
図10は、編集済み機能的構成要素へのソフトウェアソースコードの編集のための1つの例示的な編集プロセス1000を示す。図9、10、および29は、以下の説明と併せて、ともに最も良く検討される。
図9のステップ902では、図29に示されるように、ソフトウェアソースコード2902が、「main」ルーチン用の関数名表2907および変数表2904、ならびに関数名表内に記載された各付加的な関数用の変数表(例えば、2906、2908)を構築するように解析される。関数名表2907および変数表2904、2906、2908等は、以下で説明されるように、構成要素編集ファイルを生成する目的で関数を識別するために、後に使用される。システムは、関数名表および変数表から関数名および変数名を検索する。盗用について試験されるコードのテキスト内で見つかった時に、それらは、試験する前にコードから除去(編集)される。ステップ902の一実施例では、PDM109は、図11の関数表1100を生成するように、かつソフトウェアソースコードの「main」関数用の図12の変数表1200、関数「power」用の図13の変数表1300、および関数「power1」用の図14の変数表1400を生成するように、ソフトウェアソースコード800を解析する。
ステップ904では、ソフトウェアソースコードが、図50に関して上記で説明されるように、独立文の各順列に対する1つのソースコードを生成するように解析される。ステップ904の一実施例では、PDM109は、ソフトウェアソースコードインスタンス2910(1)、2910(2)、および2910(3)を生成するように、ソフトウェアソースコード2902を解析する。ステップ906では、プロセス1000(図10に関して以下で詳細に説明される)が、各ソースコードインスタンスを編集して、比較ファイルおよび構成要素編集ファイルを作成するように呼び出される。ステップ906の一実施例では、PDM109は、ソフトウェアソースコードインスタンス2910(1)を処理して、ソースコード比較ファイル2920(1)、構成要素編集ファイル「main」2922(1)、構成要素編集ファイル「function1」2922(2)、および構成要素編集ファイル「function2」2922(3)を生成するように、過程1000を実装する。同様に、PDM109は、それぞれ、比較ファイル2920(2)、構成要素編集ファイル「main」2922(4)、構成要素編集ファイル「function1」2922(5)、および構成要素編集ファイル「function2」2922(6)、ならびに比較ファイル2920(3)、構成要素編集ファイル「main」2922(7)、構成要素編集ファイル「function1」2922(8)、および構成要素編集ファイル「function2」2922(9)を生成するように、ソフトウェアソースコードインスタンス2910(2)および2910(3)を処理する。
ここで、図10の過程1000が詳細に説明される。ステップ1002では、ソース比較ファイルを形成するように、非命令文字、変数名、およびファイル名が、ソフトウェアソースコードから除去される。非命令文字は、言語コンパイラによって無視され、スペース、タブ、および改行/キャリッジリターン等の書式設定文字、およびコメントを含んでもよい。ステップ1002の一実施例では、PDM109は、図15のソース比較ファイル1500を形成するように、ソフトウェアソースコード800から書式設定、コメント、変数名、およびファイル名を除去する。機能的構成要素の図示を明確にするために、あるキャリッジリターン/改行がソース比較ファイル1500の中に残されていることに留意されたい。
ステップ1004では、ソース比較ファイル内の関数が、文字で表した長さに従って、昇順で配置される。ステップ1004の一実施例では、PDM109は、ソース比較ファイル1500内の各関数の文字で表した長さを判定し、図16のソース比較ファイル1600として示される、サイズの昇順で、これらの関数を配置する。
ステップ1006では、構成要素編集ファイル2922(*)が、ソース比較ファイル内の各関数に対して生成される。ステップ1006の一実施例では、PDM109は、第1の関数「power」用の図17の構成要素編集ファイル1700、第2の関数「power1」用の図18の構成要素編集ファイル1800、および第3の関数「main」用の図19の第3の構成要素編集ファイル1900を作成する。
図9の方法900を参照すると、ステップ908では、同様の既存並列処理ルーチンが、データベース内で識別される。ステップ908の一実施例では、PDM109は、ソフトウェアソースコード800のカテゴリ(例えば、カテゴリ206、図2)および/または関連キーワードに基づいて、ソフトウェアソースコード800と同様であるカーネル(例えば、カーネル122)およびアルゴリズム(例えば、アルゴリズム124)を識別するようにデータベース106を検索し、図7Aおよび7Bのソフトウェアソースコード700を識別する。
ステップ910から916は、ステップ908の各識別された並列処理ルーチンについて繰り返される。
ステップ910では、識別されたソフトウェアソースコードが、「main」ルーチン用の関数表および変数表、ならびに関数表内に記載された各付加的な関数用の変数表を構築するように分析される。ステップ910の一実施例では、PDM109は、それぞれ、図21、22、および23に示されるように、図20の第2の関数表2000、第1の関数「main」用の第2の変数表2100、第2の関数「power」用の2200、および第3の関数「power1」用の2300を生成するようにソフトウェアソースコード700を解析する。
ステップ912では、ステップ908の識別されたソフトウェアソースコードに編集を行い、第2の比較ファイルおよびゼロ以上の第2の構成要素編集ファイルを形成するように、プロセス1000が呼び出される。ステップ912の一実施例では、PDM109は、ソフトウェアソースコード700から書式設定、コメント、変数名、およびファイル名を除去することによって、ソフトウェアソースコード700を処理し、図24のソース比較ファイル2400を生成するようにプロセス1000を実装する。次いで、PDM109は、図24のソース比較ファイル2400内の関数を順序付けて、図25のソース比較ファイル2500を形成するために、プロセス1000を利用する。次いで、PDM109は、ソースコード700の関数「power」用の図26のソース比較ファイル2600、ソースコード700の関数「power1」用の図27のソース比較ファイル2700、およびソースコード700の関数「main」用の図28のソース比較ファイル2800を生成するように、プロセス1000を続ける。
ステップ914では、第1のソース比較ファイルのコード文と第2のソース比較ファイルのコード文との間の盗用の割合を判定するように、第1の比較ファイルが第2の比較ファイルと比較される。ステップ914の一実施例では、PDM109は、(a)比較ファイル1600と比較ファイル2500、(b)それぞれ、比較ファイル1700、1800、1900と比較ファイル2600、2700、および2800との間のある割合の盗用を判定するために、Needleman−Wunsch分析を利用する。具体的には、盗用率は、比較ファイル2500、2600、2700、および2800に対してソフトウェアソースコード800から導出される各インスタンス2910(1)、2910(2)、および2910(3)について判定される。ソースコード整合および盗用率の判定は、図31Aを参照して、以下で詳細に説明される。
ステップ916では、判定された盗用率が許容限度よりも大きい場合に、第1のソースコードファイルが拒絶される。ステップ916の一実施例では、PDM109は、60%の定義された限度を有し、判定された盗用率が60%よりも大きいため、拒絶のためにソフトウェアソースコード800にフラグを付ける。PDM109はまた、ソフトウェアソースコード800に対する拒絶通知を関連開発者152に送信してもよい。
ステップ918は決定である。もし、ステップ918で、第1のソースコードファイルが、データベース106内の任意の識別された並列処理ルーチンについてステップ916で拒絶されたことを、方法900が判定する場合、方法900は、ステップ920を続け、そうでなければ、方法900は終了する。ステップ920では、第1のソースコードファイルが容認される。ステップ920の一実施例では、ソフトウェアソースコード2902は、盗用されていないものとして容認される。
方法900を利用することによって、各関数は、盗用率を判定するように、データベース106に記憶された他の関数に対して評価されてもよい。ソフトウェアソースコード内で、関数は、完全な機能的着想と見なされてもよく、したがって、盗用について個別にチェックされる。上記で示されるように、各関数用の編集済みコードは、ファイル拡張子「.CRE」を有してもよい、構成要素編集ファイルと呼ばれる独自のファイルの中に入れられる。各構成要素編集ファイルは、(例えば、データベース106内に記憶されるような)環境100内の選択された構成要素編集ファイルに対して比較される。このプロセスは、図9で説明されるプロセスと同様であり、各識別された関数用の構成要素編集ファイルのみが、データベース106に記憶された他の関数用の構成要素編集ファイルに対して比較される。
(盗用・整合ステップ)
ソフトウェアは、典型的には、複数バージョンで作成され、1つのバージョンが以前のバージョンの特徴の多くを含む。つまり、コードのバージョン間に進化的関係があってもよい。この進化的関係に基づいて、新たに提出されたソフトウェアソースコードにとって最も近いバージョンの試験コードを判定するために、生物情報数学的ツールが使用されてもよい。Needleman−Wunsch動的プログラミングモデルを使用して、2つの編集済みファイル(例えば、構成要素編集ファイル2922(1)および構成要素編集ファイル2922(4)−2922(9))の間で全ての最適な全体的整合を得ることが可能である。Needleman−Wunsch方程式は、以下の通りである。
i,j=Mi,j+max(Mk,j+1,Mi+1,l
式中、
Mi,j=比較される完成した編集済みファイル
i=第1のファイルの長さ
j=第2のファイルの長さ
k=任意の整数>i
l=任意の整数>j
図31Aは、図16のソース比較ファイル1600および図25のソース比較ファイル2500のうちのそれぞれの最初の19文字の間の合致を図示する、1つの例示的な表3100を示す。示された技法は、各編集済みファイル全体に直接適用可能である。表3100内で、一番上の行は、ソース比較ファイル1600を表し、左の列は、ソース比較ファイル2500の文字を表す。文字がファイル1600および2500の間で合致する、図31Aに示されるように、1は、対応する四角内に配置される。図31Bは、図31Aの表3100へのNeedleman−Wunsch方程式の適用に起因する、例示的な表3110を示す。具体的には、Needleman−Wunsch方程式は、表3110を形成するように繰り返し適用される。19の連続合致文字の一次最適トレース3112が見出され、二次最適トレース3114も識別される。
Smith−Waterman動的プログラミングモデルを使用して、2つのソース比較ファイル(例えば、比較ファイル1600および2500)の間で全ての最適な局所的整合を得ることが可能である。本明細書で説明されるようなSmith−Waterman動的プログラミングモデルは、比較されたシーケンスの中の間隙の効果が加重されることを可能にするため、好ましい整合方法と見なされる。以下の方程式は、Smith−Waterman動的プログラミングモデルを示す。
式中、
a,b=アルファベットΣ上の文字列
m=長さ(a)
n=長さ(b)
H(i,j)=a[1...i]という接尾辞とb[1...j]という接尾辞との間の最大類似性スコア
w(c,d),c,d∈Σ∪{’-’},’-’は、間隙採点スキームである
実施例
シーケンス1=コード断片Aの最初の19文字
シーケンス2=コード断片Bの最初の19文字
w(match)=+2
w(a,-)=w(-,b)=w(mismatch)=-1
図31Cは、表内の「-」文字によって識別される間隙検出の規定を図示する、例示的なSmith−Watermanドット表3120を示す。また、このステップで必要とされる最適トレースを作成するために、BLASTまたは任意の他の局所的整合方法が使用されてもよいことにも留意されたい。
(盗用・比較ステップ)
フィルタにかけられ、最適に整合させられたトレースを生成するために使用される2つのコードの中で、より多くの数の合致文字が見出されるほど、これらのコードが無関係である確率が低くなる。比較されたコードが、25%を上回る、フィルタにかけられ、最適に整合させられたトレースに沿った合致を生成する場合、相同性が仮定されてもよく、つまり、コードは進化的に関係する。したがって、いずれか2つのコード(AおよびBと呼ばれ、A=盗用について試験されているコード)による、任意のフィルタにかけられ、最適に整合させられたトレースに沿った25%の文字合致が、Bに対するAの盗用を構成する。
(コード系統を判定する)
ソフトウェアソースコードは、概して、複数バージョンで作成され、1つのバージョンが以前のバージョンの特徴の多くを保持するため、複数のバージョンのコードがある場合、次いで、いくつかのバージョンのコードは、系統の中で最も近い別のバージョンに対して、フィルタにかけられた整合トレースにより高い割合の合致を有する。例えば、未知のソフトウェアソースコード(バージョンX)が、進化的に関係するソフトウェアソースコードバージョンに対して比較された場合に、以下のシナリオが起こってもよい。
図31Dは、バージョン1、2、2.1、2.2、3、3.1、および4のうちのそれぞれに対するバージョンXの盗用率が、表3132に示されるように判定される、第1の例示的なシナリオ3130を示す。バージョン2.2に対するバージョンXの100%合致は、矢印3134によって示されるように、バージョンXがバージョン2.2であることを示す。
図31Eは、バージョン1、2、2.1、2.2、3、3.1、および4のうちのそれぞれに対するバージョンXの盗用率が、表3142に示されるように判定される、第2の例示的なシナリオ3140を示す。バージョン2.1に対するバージョンXの75%合致は、矢印3144によって示されるように、バージョンXが、おそらくバージョン2.1に由来するが、バージョン2.2と同じではないことを示す。
図31Fは、バージョン1、2、2.1、2.2、3、3.1、および4のうちのそれぞれに対するバージョンXの盗用率が、表3152に示されるように判定される、第2の例示的なシナリオ3150を示す。表3152内の盗用率は、バージョンXとバージョン1、2、2.1、2.2、3、3.1、および4との間に進化がない、したがって、盗用がないことを示す。
コード作成タイムスタンプもまた、バージョンX等の何らかの未知のコードの関連を示すために、バージョン番号の代わりに使用されてもよい。
(悪質ソフトウェア挙動検出)
環境100内で、並列処理ルーチン(例えば、カーネル122およびアルゴリズム124)は、他の並列処理ルーチンに問題を引き起こすべきではない。他のソフトウェアに問題を引き起こすソフトウェアは、悪質ソフトウェアと呼ばれ、不要なソフトウェア活動は、悪質ソフトウェア挙動と呼ばれる。悪質ソフトウェア挙動は、偶発的に起こる場合があり、または意図的となり得る。いずれにしても、悪質ソフトウェア挙動は、環境100内で望ましくない。好ましくは、悪質ソフトウェアは、環境100内でそのソフトウェア(例えば、並列処理ルーチン)を公開する前に検出される。
1つの例示的な悪質ソフトウェア挙動は、メモリの中の変数(例えば、アレイ型構造またはポインタ)が溢れ、保護されたメモリがアクセスされるときである。ハッカー(すなわち、悪質ソフトウェアを意図的に作成する個人)が、システムの保護されたメモリへの不正アクセスを獲得し、次いで、そのアクセスを活用しようとする。
環境100内の悪質ソフトウェア挙動を防止するために、開発サーバ108は、悪質挙動検出器(MBD)111を含む。具体的には、MBD111は、環境100内での公開のために提出された並列処理ルーチン内の悪質挙動を検出するように機能する。MBD111は、提出された並列処理ルーチンの中の悪質ソフトウェア挙動を検出し、並列処理ルーチンがその変数を溢れさせている時を検出する。
図32は、ソフトウェアソースコード3202内の悪質ソフトウェア挙動を検出する時にMDB111によって使用される例示的なファイルを示す。第1のステップでは、MBD111は、元のソフトウェアソースコードと同じファイル名を伴い、かつ「.AUG」拡張子を伴う、ソフトウェアソースコード3202のコピーである、増補ソースコード3204を作成する。同様に、MBD111はまた、ソフトウェソースコードと同じファイル名を伴い、かつ「.MAP」拡張子を伴う、ソフトウェアソースコードのコピーである、マップされたソースコード3206も作成する。増補ソースコード3204およびマップされたソースコード3206は、各識別された線形ソース区分の区分番号を示す、コメントを含むように改正される。ソフトウェアソースコードが完全に試験されていることを確実にするために、ソフトウェアソースコード内の全ての識別された線形コード区分が、試験中に起動されなければならない。ソフトウェアソースコード3202内のある分岐が、1つ以上のエラー条件時に起動されるのみであってもよいため、これらの分岐の選択が強制されてもよい。マップされたソースコード3206は、アクセスされていない区分が試験中に報告される時の参照として、ソフトウェアソースコード3202の開発者(または提出者)に返信されてもよい。マップされたソースコード3206は、図39で例示されている。
ソフトウェアソースコード内の線形ソースコード区分を識別することは、全ての線形コード区分を単一の実行で試験することができるわけではない時に、ソフトウェアが反復して試験されることを可能にする。MBD111は、各線形コード区分からの追跡情報を、ソフトウェアソースコードと同じファイル名および「.TRK」拡張子を伴う追跡ファイル3208の中へ出力するように、増補ソースコード3204をさらに修正する。ソフトウェアソースコード3202と関連付けられる並列処理ルーチンは、追跡ファイル3208内の追跡情報によって示されるように、全ての分岐およびループコード区分が試験されるまで、本システムによる使用のために公開されない。
図33は、開発者152によって環境100に提出されるような例示的なソフトウェアソースコード3300を示す。ソフトウェアソースコード3300は、図32のソフトウェアソースコード3202を表してもよい。
図34は、増補ソースコード3204を形成するようにソフトウェアソースコード3202を改正するための1つの例示的なプロセス3400を示す。プロセス3400は、例えば、MBD111内の機械可読命令として実装される。図35は、追跡ファイル3208を作成して開くための1つの例示的なコード挿入3500を示す。図36は、現在の日付および時間ならびに区分番号を追跡ファイル3208に添付するように関数「mptWriteSegment()」を呼び出す、1つの例示的なコード挿入3600を示す。図37は、追跡ファイル3208を閉じるための1つの例示的なコード挿入3700を示す。図38Aおよび38Bは、ソフトウェアソースコード3300内の例示的なコード挿入を示す。図34、35、36、37、および38は、以下の説明を用いて、ともに最も良く検討される。
ステップ3402では、プロセス3400が、定義ファイルを含むコードを増補ソースコードに挿入する。ステップ3402の一実施例では、MBD111は、増補ソースコード3204にも挿入される追跡コードをサポートする定義を含むように、ソフトウェアソースコード3300の点3302で「#include<mpttrace.h>」を挿入する。ステップ3404では、プロセス3400は、追跡ファイルを開くコードを、増補ソースコードの第1の線形コード区分に挿入する。ステップ3404の一実施例では、MBD111は、ソフトウェアソースコード3300の第1の実行された関数(「main」)の第1の線形コード区分の冒頭にある点3304で、図35のコード挿入3500をソフトウェアソースコード3300に挿入する。ステップ3406では、プロセス3400が、識別されたループおよび分岐点に基づいて、ソフトウェアソースコード内の線形コード区分を識別する。ステップ3406の一実施例では、MBD111は、ソフトウェアソースコード3300を分析し、その中の線形コード区分3352、3354、3356、3358、3360、および3362を識別するように、分岐点3306、3308、3314、および3316、ならびにループ点3312を識別する。
ステップ3408では、プロセスが、ブロックマーカーがない単一の文であれば、識別された線形コード区分を包囲するようにブロックマーカーを追加する。ステップ3408の一実施例では、MBD111は、線形コード区分3356の周囲に区切り文字「{“and”}」を追加する。ステップ3410では、プロセス3400が、タイムスタンプ付き区分識別子を各線形コード区分内の追跡ファイルに添付するように、ソースコードを挿入する。ステップ3410の一実施例では、MBD111は、関数「mptWriteSegment(trkFile,“X”)」を呼び出すコードを追加し、Xは、各識別された線形コード区分3352、3354、3356、3358、3360、および3362内の第1の文としての区分番号である。関数「mptWriteSegment」は、すでに開かれた追跡ファイル「trkFile」の終わりに、現在の時間および日付ならびに区分番号Xを書く。ステップ3412では、プロセス3400が、各プログラム終了点前に追跡ファイルを閉じるようにソースコードを挿入する。ステップ3412の一実施例では、MBD111は、挿入3812および3826によって示されるように、各「exit」、「_exit」、および「return」文の前に図37のコード挿入3700を追加する。
加えて、「mptWriteSegment」関数は、以前の区分の実行時間および/または全実行時間が定義された最大時間を超えるかどうかを判定する。定義された最大時間制限に達した場合、「mptWriteSegment()」関数は1を返信し、そうでなければ、0を返信する。図36のコード挿入3600に示されるように、「if」文は、「mptWriteSegment()」関数からの返信値を評価し、並列処理ルーチンを時期尚早に終了させてもよい。
図39は、ソフトウェアソースコード3300に基づく、マップされたソースコード3206内の例示的なコメント挿入(太字で示される)を示す。
(カーネルデータ使用を追跡する-レベル2増補)
コンピュータ言語は、異なる静的および動的メモリ割付モデルを有してもよい。CおよびC++言語では、「malloc()」、「calloc()」、「realloc()」、および「new type()」コマンドを使用して、動的メモリが割り付けられる。アレイもまた、実行時に動的に割り付けられてもよい。割り付けられたメモリは、ヒープ空間を利用する。割付が静的でない限り、それは各スレッドの中の各ルーチンに作成される。C言語は、可変アドレスを判定し、そのアドレスから始まる任意の値を書く能力を含む。(例えば、標準的なハッカー技法である、変数が保持するように定義されているよりも多くの値をその変数に書くことによって)ルーチンに割り付けられたメモリの外側のメモリがアクセスされないことを確実にするために、静的および動的である全ての変数が位置付けられ、それらのアドレスは、オーバーフロー条件について実行時にチェックされる。
変数の定義された範囲を超えてメモリにアクセスするコードを識別するために、各変数の開始および終了アドレスが実行時に判定される。図40Aおよび40Bは、実行時に変数の開始アドレスを判定するように、増補ソースコード3204内の可変アドレス検出コード4002の例示的な配置を示す。変数アドレス検出コード4002は、各変数定義後に増補ソースコード3204に追加される。図40Aおよび40Bでは、図示を明確にするために、追加されたコードが太字で示されている。図40Aの実施例では、可変アドレス検出コード4002は、変数名文字列4006および可変アドレス4008といった2つの入力パラメータを伴う関数4004「mptStartingAddressDetector()」として実装される。変数名文字列は、変数または引用符によって取り囲まれた構成変数の名前である。アドレスパラメータは、変数のアドレスである。図40AのC言語実施例では、位置4010における変数「index」の公表後に、「mptStartingAddressDetector(“index”,&index);」が増補ソースコード3204に追加される。
図40Bの位置4012で示されるように、ポインタが公表された場合、典型的には、代入文を伴う値(すなわち、メモリ領域のアドレス)が割り当てられる。C言語では、例えば、「alloc」、「calloc」、「malloc」、および「new」といった関数が、メモリをポインタに割り付けるために使用される。記憶割付関数が代入文の右側にある場合に、代入文の左側のポインタは、図38Bの位置3840で示されるように、文内でメモリが割り付けられている。「mptStartingAddressDetector()」関数は、位置4014で示されるように、ポインタに割り当てられた開始アドレスを捕捉するために使用される。C言語では、=、+=、-=、*=、/=、%=、<<=、>>=、&=、^=、および|=が、代入演算子である。
必要とされる時に、ポインタへのメモリの割付は、位置3840で示されるような「if」文内等から隔離される。可変アドレス検出コード4002(例えば、関数「mptStartingAddressDetector()」)が開始アドレスを記録することを可能にするように、メモリの割当および割付に起因するポインタの評価は、位置4014で示されるように分離され、割り付けられたポインタの試験は、示されるように別個の「if」文内で行われる。
開始アドレスは、以下のように取得される。
非構成変数の全ての型定義が位置付けられる。
見出された時に、mptStartingAddressDetector()関数を使用して、これらの変数のアドレスを取得する。
記憶割付関数を使用してポインタ定義が生じた場合に、その代入文を隔離し、mptStartingAddressDetector()関数を使用して新しいアドレスを取得する。
記憶割付関数を用いることなく、代入演算子に遭遇した時はいつでも、変数のアドレスがアドレスを計算するために使用される時に、または変数のアドレスが変更された時に、「currentAddressDetector()」関数を使用して、代入演算子(実際または暗示)の左側の変数の現在のアドレスが捕捉される。例えば、以下のC言語文は、ポインタ値を増分する。
++bufferinfo;
実行時にポインタ値を評価するために、以下のように、文がポインタ値を変更した後に関数が挿入される。
++bufferinfo;
mptCurrent AddressDetector(“bufferinfo”, bufferinfo);
この実施例では、関数「mptCurrentAddressDetector()」は、「mptStartAddressDetector()」関数によって以前に判定され、図41の変数追跡表内4100に記憶されたような、判定された開始および終了アドレスに対して、修正されたポインタ値を比較した。具体的には、「mptCurrentAddressDetector()」関数によって判定されるようなポインタ値は、その変数の有効アドレス範囲に対して比較され、その比較の結果は、追跡ファイル3208に書かれる。図42は、「mptCurrentAddressDetector()」関数の出力を図示する、1つの例示的な表4200を示す。
(メモリ割付および割付解除を追跡する)
上述のように、メモリは、典型的には、言語内の割付関数を使用してポインタに割り付けられる。C言語では、malloc、calloc、realloc、または新しいシステム関数呼び出しを使用して割り付けられる。これらのメモリ割付を記録するために、メモリ割付代入文の左側の変数の名前を、割り付けられたリソースの表に書き込むように、割付追跡関数が、ポインタへの割当に近接して増補ソースコード3204に追加される。
図43は、割り付けられたポインタの変数名、それが割り付けられた関数の名前、および割付フラグを含有する、1つの例示的な割り付けられたリソースの表4300を示す。割付フラグは、関連変数がそれに割り付けられたメモリを有する時に、1に設定され、いずれのメモリも変数に割り付けられていない時に(例えば、割り付けられたメモリが解放されている時に)、0に設定される。メモリの割付および割付解除を追跡するための関数の一実施例が、以下で示される。
mptAllocationTableChange(“variable name”, “function name”, allocation flag);
増補ソースコード3204内のポインタ変数への各メモリ割付および割当に近接して、第3のパラメータとして1を伴う「mptAllocationTableChange()」関数の呼び出しが、割り付けられたリソースの表4300を更新して、メモリがそのポインタ変数に割り付けられたことを示す。同様に、増補ソースコード3204の各メモリ割付解除文について、文のポインタ変数へのメモリ割付解除を記録するように、第3のパラメータとして0を伴って、「mptAllocationTableChange()」関数の呼び出しが挿入される。メモリが割り付けられたリソースの表4300内にすでに記載されているポインタに割り付けられる(例えば、メモリがポインタ変数に1回以上割り付けられる)場合、同じ変数名を伴う付加的な入力が、割り付けられたリソースの表4300に追加される。
メモリがポインタ変数から割付解除された時に、変数名および関数名に合致し、1に設定された割付フラグを有する、割り付けられたリソースの表4300の中の第1の入力は、0に設定された割付フラグを有するように修正される。それにより、割り付けられたリソースの表4300は、割り付けられたメモリの異常な使用(例えば、第1のメモリが割付解除されることなく、メモリがポインタ変数に2回割り付けられた場合)を判定することができるように、メモリの割付および割付解除を追跡する。同様に、割り付けられたメモリの誤用を防止するように、アドレス割当(例えば、第2のポインタ変数に割り当てられた1つのポインタ変数内に記憶されたメモリアドレス)が追跡される。
プログラム終了点(例えば、C言語内のreturnまたはexit関数呼び出し)毎に、割付リソース表の値が追跡ファイル3208に記憶される。以下は、割付リソース表の値の追跡増補を行うために必要とされる関数を示す。
mptTraceResourceValue(sourceFileName.TRC file handler);
図44Aおよび44Bは、増補ソースコード3204へのmptTraceResourceValue()関数の例示的な追加4402および4404を示す。
(強制コード区分入力-レベル3増補)
ソフトウェアソースコード3202内のあるコード区分にアクセスすることは、典型的には、あるエラー条件時のみにアクセスされるという点で、問題があり得る。コード区分が通常動作を通してアクセスされない場合、強制区分ファイル3210(図32参照)は、これらのコード区分へのアクセスを強制するように定義されてもよい。強制区分ファイル3210は、強制されるコード区分のコード区分番号を含有し、形式「sourceFileName.FRC」のファイル名を有する。強制区分ファイル3210内で、強制されるコード区分が記載される(例えば、空白によって分離される区分番号のリストとして)。例えば、区分3および区分5および区分7が、強制入力を有するものである場合に、強制区分ファイル3210は、「3 5 7」を含有する。
図45Aおよび45Bは、条件付き分岐強制を伴う増補ソースコード3204を示す。具体的には、増補ソースコード3204は、位置4502および4504で強制区分ファイル3210へのファイルハンドルを含むように修正される。一次元強制アレイ(例えば、「mptForceArray」)が、位置4506で公表され、位置4508で0に初期化される。強制アレイは、ソフトウェアソースコード3202内にコード区分があるのと同じ数の要素を伴って公表される。増補ソースコード3204内の位置4510で、強制区分ファイル3210が読み取られ、強制区分ファイル3210からロードされた区分番号に対応する強制アレイの要素が1に設定される。次いで、強制区分ファイル3210が閉じられる。
増補ソースコード3204内で、各分岐点4512、4514、および4516は、強制アレイの適切な要素を評価するように修正される。例えば、区分6の入力点における条件文は、強制アレイの要素6を評価した。したがって、強制区分ファイル3210内に区分番号を含むことによって、そのコード区分と関連付けられる強制アレイ要素は、ファイルが実行時に読み取られる時に0に設定され、分岐文に対する条件が評価された時に、そのコード区分が入力される。
増補ソースコード3204内で、C言語について、デフォルトcaseラベルの前に、case文(例えば、switch)に追加caseが追加され、それは、強制ファイルを介したデフォルトの起動を可能にする。さらに、強制されるコード区分が別のコード区分に埋め込まれる場合(例えば、ネスト化、if文)、次いで、標的コード区分が実際に起動されていることを確実にするために、全てのネスティング分岐点の全起動が必要とされる。
(全ての区分にアクセスするための複数プログラム実行の使用)
増補ソースコード3204は、コンパイルされ、次いで、可変アドレスアクセス、コード区分アクセス、および時間/日付を含有する追跡ファイル3208を生成するように実行される。次いで、MBD111は、ソフトウェアソースコード3202内の全ての区分がアクセスされているかどうかを判定するように、追跡ファイル3208を処理する。ソフトウェアソースコード3202内の全てのコード区分がアクセスされているわけではない場合、MBD111は、アクセスされていないコード区分のリストを含有する、欠落区分ファイル3212を生成する。欠落区分ファイル3212のファイル名形式は、「sourceFileName.MIS」である。
ユーザは、識別された欠落コード区分を起動するために、修正された強制区分ファイル3210を用いて付加的な実行が必要であるかどうかを判定するように、欠落区分ファイル3212を検討してもよい。追跡ファイル3208は、増補ソースコード3204の付加的な実行からの出力がファイルに添付されるという点で累積的である。欠落区分ファイル3212は、どの区分がプロファイリングを必要とするかをユーザが知るように、増補ソースコード3204の各実行によって再生される。ソフトウェアソースコード3202の全てのコード区分がアクセスされている時、次いで、欠落区分ファイル3212は作成されず、それにより、全ての区分が分析されていることを示す。新しいソフトウェアソースファイルがユーザによって提供された場合に、同じソースファイル名を伴う任意の追跡ファイルがシステムから消去され、それにより、分析を要求するために全ての区分を必要とする。
(双方向カーネル追跡)
ソフトウェアソースコード3202を試験することが、増補ソースコード3204の数回の実行を必要とし得るため、MBD111は、提出されたカーネルの実行を双方向に辿るように、ユーザ(例えば、開発者152)がクライアント156内のユーザインターフェース160と相互作用することを可能にする。MBD111は、提出(または選択)されたカーネル(例えば、図2のカーネル204(1)、および図32のソフトウェアソースコード3202)の視覚表現を作成し、ユーザインターフェース160上に関数・構造図を表示する。図46は、マップされたソースコードファイル(例えば、図32のマップされたソースコード3206)内でも示されるような関連区分番号とともにそれぞれ表された、11のコード区分を図示する、1つの例示的な関数・構造図4600を示す。
ユーザインターフェース160内で「トレース」オプションを選択することによって、実行時間「双方向フラグ」が設定され、それは、書き込み区分関数(例えば、「mptWriteSegment()」)に、各コード区分におけるカーネルの実行を停止させ、カーネルの実行を続ける前に、ユーザが双方向に強制アレイ(例えば、「mptForceArray[]」)を設定することを可能にする。
動作の一実施例では、増補ソースコード3204が実行される際に、実行されているコード区分は、関数・構造図4600内で強調表示される。MBD111は、各分岐点(例えば、図45の分岐点4512、4514、および4516)で増補ソースコード3204の実行を停止し、関数・構造図4600の現在のコード区分から発する適切な矢印の上で左のマウスボタンをクリックすることによって、ユーザが実行経路を選択することを可能にする。経路(例えば、矢印)がユーザによって選択された時に、選択された矢印の色が変化し、ユーザが「続ける」ボタンを選択した時に、どの経路が取られるかを示す。「続ける」ボタンの選択時に、選択された経路に基づいて実行が続く。
ユーザは、右のマウスボタンを使用してコード区分を選択し、実行がその区分において中断するべきではないことを示してもよい。(例えば、分岐点、exit、およびreturnのうちの1つにおいて)増補ソースコード3204の実行が中断させられた時はいつでも、ユーザは、随意で、変数名、それらの開始、終了、および現在のアドレス、ならびにポップアップウィンドウ内のそれらの現在の場所の値を表示してもよい。例えば、ユーザは、ユーザインターフェース160内の「変数を表示・変更する」ボタンをクリックして、これらの変数を表示してもよい。ポップアップウィンドウ内の任意の変数の現在の値のフィールドを選択することは、ユーザが変数のデータを変更することを可能にする。変数がアレイである場合に、アレイ指標値はまた、そのアレイ要素の値を表示するようにユーザによって変更されてもよい。ユーザが変数の値を変更する場合、変更後に実行されるコード区分は、アクセスされた区分経路として追跡されない。一実施形態では、アレイ(例えば、「mptVariableArray[]」)が、ポップアップウィンドウ内で表示するために、この変数情報を記憶するために使用される。
さらに、(例えば、分岐点、exit、およびreturnのうちの1つにおいて)増補ソースコード3204の実行が中断させられた時はいつでも、ユーザは、随意で、ユーザインターフェース160内の「コードを表示する」ボタンを選択することによって、ポップアップウィンドウ内にマッピングファイル(例えば、マップされたソースコード3206)のコンテンツを表示してもよい。このポップアップウィンドウ内で、例えば、増補ソースコード3204に追加された「mptWriteSegment()」関数の実行から判定されるように、現在のコード区分がハイライトされる。さらに再度、MBD111は、増補ソースコード3204内で実行されたコード区分を記録し、1つ以上の異なる色で、より古いコード区分実行を表示する。コード区分実行が欠落区分ファイル3212内のデータに基づくため、新しいバージョンのソフトウェアソースコード3202が環境100にロードされる時に、全ての区分起動履歴がリセットされる。
(コード区分ロールバック)
(例えば、分岐点、exit、およびreturnのうちの1つにおいて)増補ソースコード3204の実行が中断させられた時はいつでも、ユーザは、随意で、ユーザインターフェース160内のロールバックボタン(例えば、「ロールバックコード」ボタン)を選択して、最後に実行されたコード区分において実行を再開してもよい。これは、一実施形態では、「mptWriteSegment」関数によって返信される、最後に実行されたコード区分を利用し、それにより、MBD111が、制御を返信されたコード区分へ移転するためにその情報を使用することを可能にすることによって、実装される。図47Aおよび47Bは、関数「mptWriteSegment()」からの、返信された、以前に実行された区分番号(変数「mptFlag」内に記憶されている)を評価し、その後すぐに「goto」コマンドを条件付きで実行するコードタグ4702(例えば、区分ラベル)およびコードを含むための増補ソースコード3204の例示的な改正を示す。
(共同カーネルレベルデバッギング)
上記の機能性およびツールが、例えば、ユーザの機器上ではなく、開発サーバ108内で実装されるため、双方向活動もまた、他の開発者と共有されてもよい。例えば、組織内の複数のユーザがそれぞれ、同じカーネルに対してトレースモードを起動し、次いで、上記のツールに同時にアクセスしてもよい。一実施形態では、カーネルのトレースを開始する第1の個人が、仲裁者になり、双方向セッションを検討し、随意で制御するための他のユーザアクセスを選択的に許可してもよい。
一実施形態では、各共同ユーザの名前が、ユーザインターフェース160内で表示され、強調表示および/または色を通して、どのユーザが現在実行されている区分を制御しているかが示される。例えば、現在制御しているユーザは、別のユーザの名前を選択して、それに双方向セッションの制御を渡してもよい。区分制御を伴うユーザのみが、区分を選択し、コードを表示し、変数を表示し、および/または変数を変更してもよい。仲裁者のみが、「続ける」および「ロールバックコード」ボタンを選択してもよい。仲裁者は、中断された実行中のいつでも、区分制御ユーザを変更してもよい。
(共同アルゴリズムトレーシング)
アルゴリズムは、複数のカーネルから成ってもよく、他のアルゴリズムを含んでもよい。ユーザインターフェース160内で、ユーザ(例えば、開発者152または管理者158)は、MBD111によるトレーシングのためのアルゴリズムを選択してもよい。図48は、カーネル4802(1)−(3)およびアルゴリズム4804を示す、1つの例示的なアルゴリズムトレース表示4800を示す。いったん組織/カテゴリ/アルゴリズム/トレースボタンが選択されると(アルゴリズムが現在の組織によって作成されたとすれば)、アルゴリズムのMPTトレース画面が表示される。表示4800内で、ユーザは、カーネルまたはアルゴリズムのうちのいずれかを選択してもよい(例えば、マウスでクリックする)。一実施形態では、カーネルおよびアルゴリズムへのアクセスは、ユーザの組織によって作成されたものに限定される。
例えば、カーネルを選択することは、図46の関数・構造図4600を、そのカーネルに対して表示させる。トレースモードでアルゴリズムにアクセスする第1の管理者レベルユーザ(例えば、管理者158)は、ユーザリスト4806内で示される4808ように、そのアルゴリズムの仲裁者になる。現在の仲裁者は、例えば、ユーザインターフェース160内で「解放」ボタンを選択することによって、仲裁者の地位を放棄してもよい。仲裁者は、他のユーザを、追跡されているアルゴリズム内のカーネルに割り当ててもよく、ユーザ名2が示され4810、カーネル6を仲裁する4802(2)。一実施形態では、仲裁者がリスト4806からユーザ名を選択し、次いで、そのユーザに割り当てられるカーネルを選択した時に、割当が起こり、そうするとすぐに、選択されたカーネル名が、ユーザの名前によって表示される4810。カーネル4802がユーザによってダブルクリックされた場合、選択されたカーネルがポップアップカーネルトレースウィンドウ内で表示される。現在のアルゴリズム内の別のアルゴリズム(例えば、アルゴリズム4804)が選択された(およびユーザの組織によって所有される)場合に、そのアルゴリズムのカーネル/アルゴリズムが表示される。最上アルゴリズムの仲裁者は、全てのアルゴリズムの仲裁者である。
一実施形態では、各カーネル4802に割り当てられたユーザが、そのカーネルの仲裁者になり、上記で説明されるように、続けてMBD111内でそのカーネルを辿る(例えば、図46および関連説明を参照)。カーネルに対する全ての区分が適性にアクセスされ、エラーがなく、必要な正解が得られており、そのカーネルが安全と見なされる時に、次いで、カーネルを表す記号は、カーネルが承認されていることを示す(図48内のように太字で示される、または緑色で表示される)。ユーザによるカーネルのトレース中に、そのカーネルは、鎖線輪郭で表示される(カーネル4802(2)参照)。全ての仲裁者が作成した割当は、仲裁者によって変更されるまで実施中のままである。
仲裁者は、出力値を、辿っている各カーネル/アルゴリズムに割り当てることができる。これは、必要なカーネルまたはアルゴリズムの上でダブル右クリックする(選択する)ことによって達成される。カーネル/アルゴリズムの仲裁者選択は、入力/出力選択ポップアップメニューを表示させる。「入力」ボタンが入力/出力選択ポップアップメニュー上で選択された後に、ファイルまたは変数選択ポップアップメニューが表示される。変数ファイルのURLが入力され、その後に「続く」ボタンの選択が続く場合に、以下の形式を伴うファイルが、全ての入力変数を定義するために使用される。
(variable name 1, input value 1),....(variable name n, input value n);
空白および改行/キャリッジリターン文字は無視される。変数がアレイである場合に、影響を受けるアレイ要素が選択される。例えば、(test[3],10)は、試験と名付けられたアレイの第4の要素が、値10を受容することを意味する。あらゆる未定義要素は「N/A」と指定される。「N/A」指定を伴ういずれの変数も定義されない。
ユーザインターフェース160内の「変数を表示する」ボタンの選択は、現在のカーネル/アルゴリズムに対する全ての変数を表示させる。次いで、仲裁者は、各変数の現在の値のフィールドに値を入れ、または「N/A」を入力してもよく、「N/A」は、この値が重要ではないことを意味する。アレイの中の各要素は、別々に定義されなければならない。値が与えられていない任意の変数は、「N/A」として定義されると仮定される。
「入力/出力」ポップアップメニュー内の「出力」ボタンの選択は、「ファイルまたは変数を出力する」ポップアップメニューを表示させる。「出力」ファイルおよび変数は、「入力」ファイルまたは変数と類似した方式で記入される。
全ての入力および出力変数が定義された後に、仲裁者は、起動のために開始カーネル/アルゴリズムを選択する。一実施形態では、仲裁者は、開始カーネル/アルゴリズムを左クリックし、その後にユーザインターフェース160内の「開始」ボタンを左クリックする。次いで、アルゴリズムは、開発サーバ108によって処理され、いったん完了すると、出力データは、入力された出力変数値と比較される。仲裁されたアルゴリズムは、あり得る全てのアルゴリズム経路が選択された時、および必要な値が各経路について取得された時に、辿られると考えられる。アルゴリズムは、そのアルゴリズム内で定義された全てのカーネルおよびアルゴリズムが成功裏に辿られ、安全と見なされる時に、辿られてもよい。
(危険コード判定)
MBD111は、試験されたソフトウェアソースコード3202が安全と見なされるかどうかを判定するように、追跡ファイル3208および欠落区分ファイル3212を分析する。欠落区分ファイル3212が、任意のコード区分を試験されていないものとして識別する場合、ソフトウェアソースコードは、安全と見なされない。追跡ファイル3208内で、任意の変数の現在のアドレスが、プログラム実行中に、その変数の割り当てられたアドレス範囲の外側にある場合に、ソフトウェアソースコード3202は、安全と見なされない。追跡ファイル3208内で、コード区分が、定義された最大時間を上回る全実行時間を有するものとして示される場合、ソフトウェアソースコード3202は、安全と見なされない。
追跡ファイル3208内で、(ルーピング区分を終了することなく)ルーピング区分の全実行時間の合計が、定義された最大時間を上回る場合に、ソフトウェアソースコードは、安全と見なされない。追跡ファイル3208内で、ソフトウェアソースコード3202の全実行時間が定義された最大時間を超える場合に、ソフトウェアコードは、安全と見なされない。追跡ファイル3208内で、それらに割り付けられたメモリを決して持たない、任意の割り付けられた変数がある場合に、ソフトウェアソースコード3202は、安全と見なされない。追跡ファイル3208内で、1つよりも多くのメモリ割付が、関数あたりの変数につき行われる場合に、ソフトウェアソースコード3202は、安全と見なされない。
(補助サービス)
図49は、開発者152、管理者158、および環境100を利用する組織154に補助サービスを提供する、随意的な補助リソースサーバ4902を伴う図1の環境100を示す。補助サービスは、司法サービス、技術文書サービス、言語翻訳サービス、会計サービス、グラフィックアートサービス、試験/デバッギングサービス、マーケティングサービス、ユーザ命令サービス等を含んでもよい。補助リソースサーバ4902はまた、開発者152と、環境100を利用する組織154との間に求人サービスを提供してもよい。補助リソースサーバ4902は、プログラム管理サーバ110、財務サーバ102、開発サーバ108、クラスタ112、およびデータベース106のうちの1つ以上と協働してもよく、かつ既存のサーバ内で実装されてもよく、または1つ以上の他のコンピュータサーバを利用してもよい。それにより、環境100は、補助リソースサーバ4902の包含を通して、ソーシャルネットワーキング機能を組織154、管理者158、および開発者152に提供してもよい。
図49の実施例では、補助リソースサーバ4902は、組織154(6)(またはより具体的には、組織154(6)の管理者158)からサービス情報4904を受容するように、データベース106およびグラフィカルプロセス制御サーバ104と協働する。補助リソースサーバ4902は、組織154(6)に対する組織126の入力に関連して、データベース106の中のサービス情報表4906内にサービス情報4904を記憶する。サービス情報4904は、組織154(6)によって提供されるサービスを分類するキーワードを含んでもよい。実施例を続けると、別の組織154(4)は、グラフィカルプロセス制御サーバ104を介して、サービス要求4908を提出し、他の組織によって提供されるサービスを検索するように補助リソースサーバ4902に指図してもよい。サービス要求4908は、組織154(4)によって要求されたサービスと関連付けられる1つ以上のキーワードおよび/または1つ以上のカテゴリを特定してもよい。
補助リソースサーバ4902は、サービス要求4908に基づいて、データベース106からサービス情報および関連組織情報を受容し、要求されたサービスを組織154(4)に提供する組織のリストを提示する。一実施形態では、サービス情報4904は、カーネル(例えば、図2のカーネル204)と同様のグラフィックとして提示されてもよい。図49の実施例を続けると、サービス要求4908が組織154(6)のキーワードまたは他のサービス情報4904に合致する場合、補助リソースサーバ4902は、合致サービスを提供する組織のリスト内に組織154(6)の情報を含む。次いで、組織154(4)(より具体的には、組織154(4)の管理者158)は、そのリストから1つ以上の組織を選択してもよく、そこから要求されたサービスの見積もりが求められる。次いで、補助リソースサーバ4902は、グラフィカルプロセス制御サーバ104を介して、サービス要求情報を提示し、および/または選択された組織(この実施例では組織154(6))に送信する。選択された組織は、サービス要求を評価し、応答することを拒否または容認してもよい。
図49の別の実施例では、組織154(4)および154(5)は、グラフィカルプロセス制御サーバ104を介して、それぞれ、任務の説明4920(1)および4920(2)を補助リソースサーバ4902に送信する。任務の説明4920は、提出組織154内に仕事の要件および/または地位を含む。補助リソースサーバ4902は、データベース106の任務説明表4922内に任務の説明4920を記憶する。
環境100と関連する仕事を見つけることに関心がある開発者(例えば、開発者152(6)および152(7))は、グラフィカルプロセス制御サーバ104を介して、履歴書(例えば、それぞれ、履歴書4930(1)および4930(2))を補助リソースサーバ4902に提出してもよい。補助リソースサーバ4902は、データベース106の開発者情報表4932内に履歴書4930(1)および4930(2)を記憶する。次いで、各開発者152は、入力カテゴリおよび/または1つ以上のキーワードに基づいて任務の説明4922内で任務を検索するように、グラフィカルプロセス制御サーバ104を介して、補助リソースサーバ4902と相互作用してもよい。それに応じて、補助リソースサーバ4902は、グラフィカルプロセス制御サーバ104を介して、仕事を開発者に提供する組織(例えば、組織154(4)および154(5))のリスト4934を表示してもよい。リスト4934上のこれらの組織のうちの1つ以上の開発者(例えば、開発者152(6))による選択は、補助リソースサーバ4902によって受容され、開発者152(6)および任務の説明4922と関連してデータベース106内に記憶される。
組織154(4)および154(5)の管理者158はそれぞれ、グラフィカルプロセス制御サーバ104を介して、組織リスト4934から組織を選択した開発者152の履歴書4930を評価するように、補助リソースサーバ4902と相互作用してもよい。図49の実施例では、開発者152(6)が組織リスト4934から組織154(4)を選択する場合、組織154(4)は、補助リソースサーバ4902から任務の説明4920(1)への関心の通知を受容してもよい。組織154(4)は、任務の説明502(1)に応答した開発者152のリストを検討するように、グラフィカルプロセス制御サーバ104を介して補助リソースサーバ4902と相互作用してもよい。各記載された開発者の履歴書情報(例えば、履歴書4930(1))が検討されてもよく、0人、1人、またはそれ以上の開発者が、組織の管理者によって選択されてもよく、そうするとすぐに、関連開発者情報がデータベース106内のその組織と関連付けられる。例えば、組織154(4)の管理者158によって容認されると、開発者152(6)の情報は、組織154(4)と関連付けられ、開発者は、その組織の一員となる。
その範囲から逸脱することなく、上記の方法およびシステムに変更が行われてもよい。したがって、上記の説明に含有される、または添付図面に示される事項は、限定的な意味ではなく例証的として解釈されるべきであることに留意されたい。以下の請求項は、本明細書で説明される全ての一般的および具体的特徴、ならびに、言語上、その間にあると考えられ得る、本方法およびシステムの範囲の全ての記述を対象とすることを目的とする。

Claims (18)

  1. 並列処理計算開発環境であって、
    (a)カーネルおよび(b)アルゴリズムのうちの少なくとも1つを含む、並列処理ルーチンを作成するように、それを通して少なくとも1人の開発者が前記開発環境にアクセスしてもよい、インターフェースを提供する、グラフィカルプロセス制御サーバと、
    前記並列処理ルーチンの認可および使用料を管理するための財務サーバであって、前記並列処理ルーチンの前記開発者は、前記認可および使用料の一部分を受容する、財務サーバと
    を含む、開発環境。
  2. 前記財務サーバは、前記並列処理ルーチンについて、(a)認可費用、(b)使用費用、および(c)公開権限のうちの少なくとも1つを判定するように、少なくとも1人の管理者から入力を受容し、前記公開権限は、前記ルーチンが他の組織と共有されてもよいかどうかを示す、請求項1に記載の環境。
  3. 第1の開発者は、第1のカーネルを作成するように前記開発環境にアクセスし、第2の開発者は、前記第1のカーネルを使用する第1のアルゴリズムを作成するように前記開発環境にアクセスし、
    前記財務サーバは、認可料で前記第1のカーネルを前記第2の開発者に認可するため、および前記認可料の少なくとも一部分を前記第1の開発者に支払うために使用される、
    請求項1に記載の開発環境。
  4. 前記財務サーバは、前記第1の開発者による前記環境の利用の支払いとして、前記認可料の一部分を保持する、請求項3に記載の環境。
  5. 第2のカーネルのプロファイルを作成し、前記カーネルの相対的性能を判定するように、前記第1のカーネルのプロファイル結果に対して前記第2のカーネルのプロファイル結果を比較する、開発サーバを含む、請求項3に記載の環境。
  6. 少なくとも1人の開発者および複数の組織に関する情報を記憶するためのデータベースと、
    前記開発者および前記組織と相互作用するようにインターフェースを提供するためのグラフィカルプロセス制御サーバと、
    (a)前記開発者から、前記開発者の履歴書を受容し、(b)前記組織のうちの少なくとも1つから、行われる任務の説明を受容するように、前記グラフィカルプロセス制御サーバと協働する、補助リソースサーバと
    を含み、
    前記補助リソースサーバは、前記少なくとも1人の開発者の前記履歴書に合致する仕事を提供する組織のリストを双方向に提供し、前記開発者による前記少なくとも1つの組織の選択を受容し、前記開発者の前記履歴書を前記選択された組織に伝送することが可能であり、前記組織のうちの1つは、前記履歴書の中の情報に基づいて行われる前記仕事に関する情報で前記開発者に応答する、並列処理開発環境。
  7. 処理ノードのクラスタを含む、並列処理システム上で実行する並列処理ルーチンのプロファイルデータを自動的に判定するための並列処理開発環境内で動作するコンピュータ実装方法であって、
    前記クラスタの単一の処理ノード上の試験データを処理し、第1の実行時間を判定するように、前記並列処理ルーチンを実行するステップと、
    前記第1の実行時間をNで割ることによって、前記クラスタのN個の処理ノード上の前記試験データを同時に処理するように、前記並列処理ルーチンを実行するための予測実行時間を開発サーバ内で計算するステップと、
    前記クラスタのN個の処理ノード上の前記試験データを同時に処理し、第2の実行時間を判定するように、前記並列処理ルーチンを実行するステップと、
    前記予測実行時間を前記第2の実行時間で割ることによって、前記並列処理ルーチンのアムダールスケーリングを前記開発サーバ内で計算するステップと
    を含み、
    前記アムダールスケーリングおよび前記第1の実行時間は、前記プロファイルデータの少なくとも一部を形成する、方法。
  8. 前記並列処理ルーチンによって使用される最大量のRAMを前記開発サーバ内で判定するステップをさらに含み、前記プロファイルデータは、前記使用される最大量のRAMを含む、請求項7に記載の方法。
  9. 前記並列処理ルーチンのうちのそれぞれに対する(a)定義されたカテゴリおよび(b)定義されたキーワードのうちの少なくとも1つ、ならびに前記並列処理ルーチンのうちのそれぞれと関連付けられるキーワードに基づいて、
    前記並列処理環境内で少なくとも1つの同様の並列処理ルーチンを選択するステップと、
    参照プロファイルを判定するように、前記選択された同様の並列処理ルーチンのうちのそれぞれに対する実行および計算するステップを行うステップと、
    選択された並列処理ルーチンに対して前記並列処理ルーチンを評価し、ランク付けするように、前記プロファイルデータを前記参照プロファイルのうちのそれぞれと比較するステップと
    をさらに含む、請求項7に記載の方法。
  10. 並列処理ルーチンのソースコードの中の盗用を識別するためのコンピュータ実装方法であって、
    (a)第1のソース比較ファイルを作成するように、候補ソースコードファイルから、書式設定、コメント、変数名、およびファイル名を除去するステップと、
    (b)前記候補ソースコードファイルの中の選択されたカテゴリおよびキーワードに基づいて、データベース内で同様の既存並列処理ルーチンを識別するステップと、
    (c)前記識別された並列処理ルーチンの次のソースコードファイルを選択するステップと、
    (d)第2のソース比較ファイルを形成するように、前記選択されたソースコードファイルから、書式設定、コメント、変数名、およびファイル名を除去するステップと、
    (e)前記第2のソース比較ファイルの中のコード文に合致する、前記第1のソース比較ファイルの中のある割合のコード文を判定するように、前記第1のソース比較ファイルを前記第2のソース比較ファイルと比較するステップと、
    (f)前記判定された割合が所定の値よりも大きい場合に、前記候補ソースコードファイルを拒絶するステップと、
    (g)ファイル比較が終了されるまで、または前記ソースコードファイルが拒絶されるまで、前記候補ソースコードファイルを前記選択されたソースコードファイルと比較するように、ステップ(c)から(f)を繰り返すステップと、
    (h)前記判定された割合が前記所定の値よりも大きい場合に、前記候補ソースコードファイルが前記選択されたソースコードを盗用したことを判定するステップと
    を含む、方法。
  11. 各前記ソースコードファイルに対する前記ソースコードの複数のインスタンスは、前記ソース比較ファイルのうちのそれぞれを生成するように作成され、
    前記インスタンスのうちのそれぞれは、それぞれのコードブロック内の独立文の1つの順列を表し、
    各前記順列は、配置が特定のコードブロック内のいずれの文の従属関係にも影響しないならば、任意の関連文とともに、独立しているものとして判定されるソースコード文を、前記ブロック内に配置することによって作成される、請求項10に記載の方法。
  12. 各前記順列は、前記ソースコードファイルのうちのそれぞれの中の前記ソフトウェアコード文を、それらを分離するルーピングまたは分岐文を伴わずに、2つ以上のコード文を含むブロックにグループ化することによって、作成され、
    独立しているものとして判定される前記ソースコード文は、コードブロック内の任意の先行代入文の左側でも見出される、その同じブロック内の代入文の右側で見出される変数を含まない、請求項11に記載の方法。
  13. 並列処理システム用のソースコードの中の盗用を識別するためのコンピュータ実装方法であって、
    複数の編集済みソースコードファイルを作成するように、複数のソースコードファイルからの非命令文字、コメント、変数名、およびファイルを編集するステップと、
    複数の残りの編集済みソースコードファイルの中のコード文に合致する、前記編集済みソースコードファイルのうちの第1のソースコードファイルの中のある割合のコード文を判定するように、前記編集済みソースコードファイルのうちの前記第1のソースコードファイルを、前記複数の残りの編集済みソースコードファイルのうちのそれぞれと比較するステップと、
    前記判定された割合が所定の値よりも大きい場合、前記編集済みソースコードファイルのうちの前記第1のソースコードファイルが、前記残りの編集済みソースコードファイルを盗用したことを判定するステップと
    を含む、方法。
  14. 前記ソースコードファイルのそれぞれに対する前記ソースコードの複数のインスタンスは、前記ソース比較ファイルのうちのそれぞれを生成するように作成され、前記インスタンスのうちのそれぞれは、それぞれのコードブロック内の独立文の1つの順列を表す、請求項13に記載の方法。
  15. 各前記順列は、前記ソースコードファイルのうちのそれぞれの中の前記ソフトウェアコード文を、それらを分離するルーピングまたは分岐文を伴わずに、2つ以上のコード文を含むブロックにグループ化することによって、作成される、請求項13に記載の方法。
  16. 並列処理機能のソースコードの中の盗用を識別するためのコンピュータ実装方法であって、
    第1の構成要素編集比較ファイルを作成するように、ソースコードファイルの中の候補関数からの非命令文字、コメント、変数名、およびファイル名を編集するステップと、
    同様の関数の間の合致、および前記候補関数を含有するソースコードファイルの中の選択されたカテゴリおよびキーワードに基づいて、データベース内の前記同様の関数を識別するステップと、
    前記識別された同様の関数の中の次の関数を選択するステップと、
    第2の構成要素編集比較ファイルを形成するように、前記選択された次の関数からの非命令文字、コメント、変数名、およびファイル名を編集するステップと、
    前記第2の構成要素編集比較ファイルの中のコード文に合致する、前記第1の構成要素編集比較ファイルの中のある割合のコード文を判定するように、前記構成要素編集比較ファイルを前記第2の構成要素編集比較ファイルと比較するステップと、
    前記判定された割合が所定の値よりも大きい場合、前記ソースコードファイルの中の前記候補関数が前記選択された次の関数を盗用したことを判定するステップと
    を含む、方法。
  17. 並列処理ルーチンの開発を促進するためのシステムであって、
    前記並列処理ルーチンを作成するように、それを通して少なくとも1つの開発者サーバが前記システムの開発環境にアクセスしてもよい、インターフェースを含む、グラフィカルプロセス制御サーバと、
    前記グラフィカルプロセス制御サーバから前記並列処理ルーチンを受容し、データベース内に前記並列処理ルーチンを記憶するための開発サーバと、
    前記並列処理ルーチンについて、(a)認可料および(b)使用料のうちの一方または両方を得るための財務サーバであって、前記財務サーバは、前記未払い認可料の少なくとも一部および前記未払い使用料の少なくとも一部を前記システムの所有者に分配することが可能であり、前記財務サーバは、さらに、前記未払い認可料の少なくとも一部および前記未払い使用料の少なくとも一部を前記並列処理ルーチンの開発者に分配することが可能な財務サーバと
    を含む、システム。
  18. 並列処理ルーチンの開発者への経済報酬を追跡するための方法であって、
    前記並列処理ルーチンの開発環境の財務サーバ内で、前記並列処理ルーチンと関連付けられる認可料を得るステップと、
    前記財務サーバ内で、前記並列処理ルーチンの使用と関連付けられる使用料を得るステップと、
    前記未収認可料の少なくとも一部および前記未収使用料の少なくとも一部を前記並列処理ルーチンの開発者に分配するステップと
    を含む、方法。
JP2013526183A 2010-08-26 2011-08-26 並列処理開発環境および関連する方法 Pending JP2013536535A (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US37742210P 2010-08-26 2010-08-26
US61/377,422 2010-08-26
PCT/US2011/049406 WO2012027701A2 (en) 2010-08-26 2011-08-26 Parallel processing development environment and associated methods

Publications (1)

Publication Number Publication Date
JP2013536535A true JP2013536535A (ja) 2013-09-19

Family

ID=45724093

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2013526183A Pending JP2013536535A (ja) 2010-08-26 2011-08-26 並列処理開発環境および関連する方法

Country Status (4)

Country Link
US (1) US20120101929A1 (ja)
EP (1) EP2609518A2 (ja)
JP (1) JP2013536535A (ja)
WO (1) WO2012027701A2 (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2020170570A (ja) * 2018-12-10 2020-10-15 株式会社One Act Aiを使用したソースコード売買システム

Families Citing this family (21)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7793269B2 (en) 2005-02-15 2010-09-07 Ebay Inc. Parallel software testing based on a normalized configuration
US10016684B2 (en) * 2010-10-28 2018-07-10 At&T Intellectual Property I, L.P. Secure geographic based gaming
US9348894B2 (en) * 2011-03-31 2016-05-24 Infosys Limited Facet support, clustering for code query results
US9460224B2 (en) 2011-06-16 2016-10-04 Microsoft Technology Licensing Llc. Selection mapping between fetched files and source files
US9563714B2 (en) 2011-06-16 2017-02-07 Microsoft Technology Licensing Llc. Mapping selections between a browser and the original file fetched from a web server
US9753699B2 (en) * 2011-06-16 2017-09-05 Microsoft Technology Licensing, Llc Live browser tooling in an integrated development environment
US9324126B2 (en) 2012-03-20 2016-04-26 Massively Parallel Technologies, Inc. Automated latency management and cross-communication exchange conversion
US9424168B2 (en) 2012-03-20 2016-08-23 Massively Parallel Technologies, Inc. System and method for automatic generation of software test
US8959494B2 (en) 2012-03-20 2015-02-17 Massively Parallel Technologies Inc. Parallelism from functional decomposition
US9977655B2 (en) 2012-03-20 2018-05-22 Massively Parallel Technologies, Inc. System and method for automatic extraction of software design from requirements
US8762946B2 (en) * 2012-03-20 2014-06-24 Massively Parallel Technologies, Inc. Method for automatic extraction of designs from standard source code
WO2014152800A1 (en) 2013-03-14 2014-09-25 Massively Parallel Technologies, Inc. Project planning and debugging from functional decomposition
US9195436B2 (en) * 2013-10-14 2015-11-24 Microsoft Technology Licensing, Llc Parallel dynamic programming through rank convergence
US9760369B2 (en) 2013-12-13 2017-09-12 Infosys Limited Assessing modularity of a program written in object oriented language
US9851949B2 (en) 2014-10-07 2017-12-26 Kevin D. Howard System and method for automatic software application creation
US10496514B2 (en) 2014-11-20 2019-12-03 Kevin D. Howard System and method for parallel processing prediction
JP6848340B2 (ja) * 2016-10-25 2021-03-24 株式会社リコー 情報処理システム、更新方法、情報処理装置及びプログラム
US11520560B2 (en) 2018-12-31 2022-12-06 Kevin D. Howard Computer processing and outcome prediction systems and methods
US11782819B2 (en) 2020-07-15 2023-10-10 Microsoft Technology Licensing, Llc Program execution monitoring using deep memory tracing
US11861336B2 (en) 2021-08-12 2024-01-02 C Squared Ip Holdings Llc Software systems and methods for multiple TALP family enhancement and management
US11687328B2 (en) 2021-08-12 2023-06-27 C Squared Ip Holdings Llc Method and system for software enhancement and management

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2001236218A (ja) * 2000-02-22 2001-08-31 Yokogawa Electric Corp 課金システム
JP2004227180A (ja) * 2003-01-21 2004-08-12 Nec Corp ライセンス課金システムおよびライセンス課金方法
JP2006106948A (ja) * 2004-10-01 2006-04-20 Hitachi Ltd アプリケーションプログラム開発支援方法及びシステム
JP2009187590A (ja) * 2005-01-19 2009-08-20 Imageom:Kk クラスタコンピュータミドルウェア、クラスタコンピュータシミュレータ、クラスタコンピュータ用アプリケーション、およびアプリケーション開発支援方法

Family Cites Families (17)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US1331018A (en) * 1919-09-29 1920-02-17 Joseph O Luthy Separator for secondary batteries
US5488713A (en) * 1989-12-27 1996-01-30 Digital Equipment Corporation Computer simulation technique for predicting program performance
JP4739465B2 (ja) * 1997-06-09 2011-08-03 インタートラスト テクノロジーズ コーポレイション ソフトウェアセキュリティを増強するための混乱化技術
CA2418255A1 (en) * 2003-01-31 2004-07-31 Ibm Canada Limited - Ibm Canada Limitee Tracking and maintaining related and derivative code
US7568109B2 (en) * 2003-09-11 2009-07-28 Ipx, Inc. System for software source code comparison
US7503035B2 (en) * 2003-11-25 2009-03-10 Software Analysis And Forensic Engineering Corp. Software tool for detecting plagiarism in computer source code
US20060116966A1 (en) * 2003-12-04 2006-06-01 Pedersen Palle M Methods and systems for verifying protectable content
US7707634B2 (en) * 2004-01-30 2010-04-27 Microsoft Corporation System and method for detecting malware in executable scripts according to its functionality
US7493596B2 (en) * 2004-06-30 2009-02-17 International Business Machines Corporation Method, system and program product for determining java software code plagiarism and infringement
US20080077570A1 (en) * 2004-10-25 2008-03-27 Infovell, Inc. Full Text Query and Search Systems and Method of Use
US7797245B2 (en) * 2005-03-18 2010-09-14 Black Duck Software, Inc. Methods and systems for identifying an area of interest in protectable content
US20070265982A1 (en) * 2006-05-09 2007-11-15 Stora Enso Oyj Methods and computer program products for licensing software to multiple user classes
US8108315B2 (en) * 2006-06-19 2012-01-31 Hewlett-Packard Development Company, L.P. Discovering software code subject to licenses
US8166466B2 (en) * 2007-06-22 2012-04-24 Microsoft Corporation Function matching in binaries
US20090119313A1 (en) * 2007-11-02 2009-05-07 Ioactive Inc. Determining structure of binary data using alignment algorithms
BRPI0822100A2 (pt) * 2007-12-20 2015-06-30 Hsbc Technologies Inc Método e sistema para administrar automaticamente processos no desenvolvimento paralelo de um aplicativo por uma interface de usuário gráfica, sistema de desenvolvimento de aplicativo de computador, e, meio legível por computador de instruções
US8255885B2 (en) * 2008-06-16 2012-08-28 Software Analysis And Forensic Engineering Corp. Detecting copied computer source code by examining computer object code

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2001236218A (ja) * 2000-02-22 2001-08-31 Yokogawa Electric Corp 課金システム
JP2004227180A (ja) * 2003-01-21 2004-08-12 Nec Corp ライセンス課金システムおよびライセンス課金方法
JP2006106948A (ja) * 2004-10-01 2006-04-20 Hitachi Ltd アプリケーションプログラム開発支援方法及びシステム
JP2009187590A (ja) * 2005-01-19 2009-08-20 Imageom:Kk クラスタコンピュータミドルウェア、クラスタコンピュータシミュレータ、クラスタコンピュータ用アプリケーション、およびアプリケーション開発支援方法

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
雲切啓太、織田健: "公開範囲制御を導入した分散ソフトウェアリポジトリ", レクチャーノート/ソフトウェア学 19 ソフトウェア工学の基礎IV, JPN6014030203, 10 January 1998 (1998-01-10), JP, pages 131 - 134, ISSN: 0002856894 *

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2020170570A (ja) * 2018-12-10 2020-10-15 株式会社One Act Aiを使用したソースコード売買システム
JP2021168184A (ja) * 2020-07-22 2021-10-21 株式会社One Act Aiを使用したソースコード売買システム

Also Published As

Publication number Publication date
US20120101929A1 (en) 2012-04-26
EP2609518A2 (en) 2013-07-03
WO2012027701A3 (en) 2012-05-31
WO2012027701A2 (en) 2012-03-01

Similar Documents

Publication Publication Date Title
JP2013536535A (ja) 並列処理開発環境および関連する方法
Al-Baik et al. The kanban approach, between agility and leanness: a systematic review
US11222074B2 (en) Methods for the augmentation, exploration, and maintenance of project hierarchies
US11176154B1 (en) Collaborative dataset management system for machine learning data
Jalote A concise introduction to software engineering
Yussupov et al. A systematic mapping study on engineering function-as-a-service platforms and tools
CN106371840A (zh) 基于众包的软件开发方法及装置
JPH0589045A (ja) データ処理システム及び作成方法
Bux et al. SAASFEE: scalable scientific workflow execution engine
Wagner et al. Problem characterization and abstraction for visual analytics in behavior-based malware pattern analysis
An et al. An empirical study of crash-inducing commits in Mozilla Firefox
US11614924B1 (en) Systems, methods, user interfaces, and development environments for a data manager
Beyer et al. Grouping android tag synonyms on stack overflow
Suchenia et al. Selected approaches towards taxonomy of business process anomalies
Zhou et al. A declarative optimization engine for resource provisioning of scientific workflows in IaaS clouds
Ivanov et al. Abench: Big data architecture stack benchmark
WO2020170713A1 (ja) プラント機器情報管理システム
Koch et al. Exploring the effects of process characteristics on products quality in open source software development
KR100985192B1 (ko) 소프트웨어 개발 시스템
Haarmann et al. Cross-case data objects in business processes: Semantics and analysis
Cheikhrouhou et al. Formal specification and verification of cloud resource allocation using timed petri-nets
Afifi et al. Extending BPSim based on workflow resource patterns
Capiluppi et al. Towards a dependency-driven taxonomy of software types
Shafi et al. Dependency Test: Portraying Pearson's Correlation Coefficient Targeting Activities in Project Scheduling
Szőke Fighting Software Erosion with Automated Refactoring

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20130829

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20140625

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20140716

A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20141219