JP2021192187A - 出現頻度算出プログラム、グラフィックス プロセッシング ユニット、情報処理装置、及び出現頻度算出方法 - Google Patents

出現頻度算出プログラム、グラフィックス プロセッシング ユニット、情報処理装置、及び出現頻度算出方法 Download PDF

Info

Publication number
JP2021192187A
JP2021192187A JP2020098766A JP2020098766A JP2021192187A JP 2021192187 A JP2021192187 A JP 2021192187A JP 2020098766 A JP2020098766 A JP 2020098766A JP 2020098766 A JP2020098766 A JP 2020098766A JP 2021192187 A JP2021192187 A JP 2021192187A
Authority
JP
Japan
Prior art keywords
thread
data
appearance frequency
group
numerical value
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.)
Withdrawn
Application number
JP2020098766A
Other languages
English (en)
Inventor
巧 本田
Takumi Honda
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.)
Fujitsu Ltd
Original Assignee
Fujitsu Ltd
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 Fujitsu Ltd filed Critical Fujitsu Ltd
Priority to JP2020098766A priority Critical patent/JP2021192187A/ja
Priority to US17/200,948 priority patent/US11488280B2/en
Publication of JP2021192187A publication Critical patent/JP2021192187A/ja
Withdrawn legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T1/00General purpose image data processing
    • G06T1/20Processor architectures; Processor configuration, e.g. pipelining
    • 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/3001Arithmetic instructions
    • 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30021Compare instructions, e.g. Greater-Than, Equal-To, MINMAX
    • 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/3004Arrangements for executing specific machine instructions to perform operations on memory
    • 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/52Program synchronisation; Mutual exclusion, e.g. by means of semaphores
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T1/00General purpose image data processing
    • G06T1/60Memory management

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Computational Mathematics (AREA)
  • Mathematical Analysis (AREA)
  • Mathematical Optimization (AREA)
  • Pure & Applied Mathematics (AREA)
  • Image Processing (AREA)
  • Complex Calculations (AREA)

Abstract

【課題】出現頻度算出において、アトミック処理の実行回数を抑制する【解決手段】情報処理装置が有するGPU(グラフィックス プロセッシング ユニット)に実行させるプログラムであって、複数のスレッドで構成されるスレッドグループを1以上構築する構築処理と、前記スレッドグループは、構成するスレッドと同一数のデータを含むデータ群を入力データから取得する取得処理と、前記スレッドグループの複数のスレッドそれぞれは、前記データ群のうち1つのデータを担当し、前記スレッドは、自スレッドが担当するデータの第1の数値が前記データ群において重複しない場合、前記第1の数値の出現頻度を記憶する第1記憶領域に1を加算し、前記第1の数値が前記データ群において重複する場合、自スレッドが前記第1の数値のデータを担当するスレッド群に1つ存在する代表スレッドであるとき、前記第1記憶領域に前記重複する数を示す重複数を加算する加算処理と、を実行する。【選択図】 図13

Description

本発明は、出現頻度算出プログラム、グラフィックス プロセッシング ユニット、情報処理装置、及び出現頻度算出方法に関する。
グラフィックス プロセッシング ユニット(Graphics Processing Unit:GPU)は、画像処理やデータ圧縮処理を行うためのアクセレータあるいはプロセッサである。GPUは、例えば、多数の演算器や関数を有する。
GPUは、例えば、画像処理において、入力データの値を一定区間ごとに区切り、各区間内における各データの出現頻度を算出し、ヒストグラムを生成する場合がある。ヒストグラムは、入力データの特性を示し、例えば、画像の平坦化や、コントラスト強調などに用いられる。
GPUに関する技術としては、以下の先行技術文献に記載されている。
特表2016−527650号公報 特開2019−212171号公報 特開2014−106715号公報
しかし、GPUは、出現頻度の算出において、複数のアトミック処理を実行する。アトミック処理とは、例えば、同一メモリへの同時アクセスなどを防止するため、他スレッドの割り込みを許容しない非可分な処理である。GPUは、アトミック処理を実行するとき、アトミックな処理を実行するスレッド以外のスレッドを待ち状態とする。すなわち、アトミック処理を実行することで、複数のスレッドに待ち時間が発生し、処理に遅延が発生する。
そこで、一開示は、出現頻度算出において、アトミック処理の実行回数を抑制する出現頻度算出プログラム、グラフィックス プロセッシング ユニット、情報処理装置、及び出現頻度算出方法を提供する。
情報処理装置が有するGPU(グラフィックス プロセッシング ユニット)に実行させるプログラムであって、複数のスレッドで構成されるスレッドグループを1以上構築する構築処理と、前記スレッドグループは、構成するスレッドと同一数のデータを含むデータ群を入力データから取得する取得処理と、前記スレッドグループの複数のスレッドそれぞれは、前記データ群のうち1つのデータを担当し、前記スレッドは、自スレッドが担当するデータの第1の数値が前記データ群において重複しない場合、前記第1の数値の出現頻度を記憶する第1記憶領域に1を加算し、前記第1の数値が前記データ群において重複する場合、自スレッドが前記第1の数値のデータを担当するスレッド群に1つ存在する代表スレッドであるとき、前記第1記憶領域に前記重複する数を示す重複数を加算する加算処理と、を実行する。
一開示は、出現頻度算出において、アトミック処理の実行回数を抑制する。
図1は、情報処理システム10の構成例を示す図である。 図2は、情報処理装置100の構成例を表す図である。 図3は、入力データ及び出現頻度の例を示す図である。 図4は、出現頻度算出処理の例を示す図である。 図5は、第1方式出現頻度算出処理の処理フローチャートの例を示す図である。 図6は、処理S100−1及び処理S100−2の例を示す図である。 図7は、処理S100−4の例を示す図である。 図8は、第2方式出現頻度算出処理の処理フローチャートの例を示す図である。 図9は、処理S200−1及び処理S200−2の例を示す図である。 図10は、処理S200−3の例を示す図である。 図11は、処理S200−4の例を示す図である。 図12は、処理S200−5の例を示す図である。 図13は、処理S200−6の例を示す図である。 図14は、データ処理S300の処理フローチャートの例を示す図である。 図15は、方式判定処理S400の処理フローチャートの例を示す図である。 図16は、方式判定処理S400の処理フローチャートの例を示す図である。
[第1の実施の形態]
第1の実施の形態について説明する。
<情報処理システム10の構成例>
図1は、情報処理システム10の構成例を示す図である。情報処理システム10は、情報処理装置100及び入力データ200を有する。情報処理システム10は、入力データ200を情報処理装置100に入力し、情報処理装置100が入力データ200を処理し、情報処理装置100が処理結果を出力するシステムである。
入力データ200が画像データである場合について、以下に説明する。情報処理装置100は、例えば、ユーザやアプリケーションプログラムから、入力データ200を入力される(S10)。
情報処理装置100は、入力データ200に含まれる値それぞれの、出現頻度を算出し、ヒストグラムを生成する。出現頻度は、入力データ中の各値(数値)が出現する回数(個数)を示す。情報処理装置100は、生成したヒストグラムに基づき、画像の平坦化や、コントラスト強調などを行う。また、情報処理装置100は、画像解析処理として、データのコーデック(複合化)などを行う。
情報処理装置100は、入力データ200を出力用のフォーマット(例えば画像)に変換すると、例えば、情報処理装置100が有するディスプレイなどの表示部に、変換した画像を出力し(S11)、表示させる。
<情報処理装置100の構成例>
図2は、情報処理装置100の構成例を表す図である。情報処理装置100は、CPU(Central Processing Unit)110、ストレージ120、メモリ130、及びGPU140を有する。
ストレージ120は、プログラムやデータを記憶する、フラッシュメモリ、HDD(Hard Disk Drive)、又はSSD(Solid State Drive)などの補助記憶装置である。ストレージ120は、データ処理プログラム121を記憶する。また、ストレージ120は、GPU140が実行する第1方式出現頻度算出プログラム1411、第2方式出現頻度算出プログラム1412、第1関数プログラム1413、第2関数プログラム1414、第3関数プログラム1415を記憶する。
メモリ130は、ストレージ120に記憶されているプログラムをロードする領域である。また、メモリ130は、プログラムがデータを記憶する領域としても使用されてもよい。
CPU110は、ストレージ120に記憶されているプログラムを、メモリ130にロードし、ロードしたプログラムを実行し、各部を構築し、各処理を実現するプロセッサである。
CPU110は、データ処理プログラム121を実行することで、判定部を構築し、データ処理を行う。データ処理は、入力データに対して、データ解析処理やデータ画像化処理などを実行し、処理結果を出力する処理である。CPU110は、データ処理において、一部の処理をGPU140に実行させる。また、CPU110は、データ処理においてGPU140に入力データの出現頻度算出処理を実行させる場合、出現頻度算出処理の方式を決定する方式判定処理を行う。
CPU110は、データ処理プログラム121が有する方式判定モジュール1211を実行することで、判定部を構築し、方式判定処理を行う。方式判定処理は、GPU140に実行させる出現頻度算出処理の方式を決定する処理である。
GPU140は、ローカルメモリ142を有し、例えば、ストレージ120に記憶されているプログラムを、ローカルメモリ142にロードし、ロードしたプログラムを実行し、各部を構築し、各処理を実現するプロセッサまたはアクセレータである。
ローカルメモリ142は、ストレージ120が記憶するプログラムをロードする領域である。また、ローカルメモリ142は、GPU140(プログラム)が、データを記憶する領域として使用される。
GPU140は、第1方式出現頻度算出プログラム1411を実行することで、構築部、取得部、及び加算部を構築し、第1方式出現頻度算出処理を行う。第1方式出現頻度算出処理は、入力データを複数のデータ群に分割し、分割したデータ群ごとに出現頻度を算出し、各データ群の算出頻度を加算することで、入力データ全体の出現頻度を算出する処理である。
GPU140は、第2方式出現頻度算出プログラム1412を実行することで、構築部、取得部、及び加算部を構築し、第2方式出現頻度算出処理を行う。第2方式出現頻度算出処理は、入力データを複数のデータ群に分割し、分割したデータ群ごとに出現頻度を算出し、各データ群の算出頻度を加算することで、入力データ全体の出現頻度を算出する処理である。なお、第2方式出現頻度算出処理におけるアトミック処理の実行回数は、第1方式出現頻度算出処理におけるアトミック処理の実行回数以下である。第1及び第2方式出現頻度算出処理の詳細については、後述する。
GPU140は、第1関数プログラム1413を実行することで、加算部を構築し、第1関数処理を行う。第1関数処理は、第1関数を実行する処理である。第1関数処理は、第2方式出現頻度算出処理において、実行される。
GPU140は、第2関数プログラム1414を実行することで、加算部を構築し、第2関数処理を行う。第2関数処理は、第2関数を実行する処理である。第2関数処理は、第2方式出現頻度算出処理において、実行される。
GPU140は、第3関数プログラム1415を実行することで、加算部を構築し、第3関数処理を行う。第3関数処理は、第3関数を実行する処理である。第3関数処理は、第2方式出現頻度算出処理において、実行される。
なお、図2において、データ処理プログラム121は、ストレージ120に記憶され、CPU110によって実行されるが、GPU140によって実行されても良い。
また、ストレージ120に記憶されるプログラムで実行される処理は、例えば、演算器や回路などのハードウェアで実現されても良い。第1関数処理、第2関数処理、及び第3関数処理は、例えば、それぞれ専用の演算器で実現されても良い。
<出現頻度算出処理>
情報処理装置100は、データ処理において、出現頻度を算出する出現頻度算出処理を行う場合がある。
図3は、入力データ及び出現頻度の例を示す図である。入力データは、「0」、「1」、「2」、及び「3」の4種類の数値(要素)で構成される。出現頻度は、各値が入力データ中に出現する数(存在する個数)を示す。出現頻度は、「0」が25個、「1」が22個、「2」が12個、「3」が5個である。情報処理装置100は、算出された出現頻度に基づき、ヒストグラムを生成し、画像処理を行う。以下、図3の例を使用し、第1方式出現頻度算出処理、及び第2方式出現頻度算出処理について説明する。
図4は、出現頻度算出処理の例を示す図である。第1方式及び第2方式出現頻度算出処理において、GPU140は、複数のスレッドグループそれぞれに入力データを対応づける。なお、GPU140は、第1方式又は第2方式出現頻度算出処理を行う前処理としてスレッドを構築してもよいし、常時スレッドを構築しておいてもよい。図4において、スレッドグループは、スレッドグループG1及びG2の2グループである。各スレッドグループは、それぞれスレッドT1〜T4、及びスレッドT5〜T8の4スレッドで構成される。スレッドグループG1は、入力データの上位(左側)4列、スレッドグループG2は、入力データの下位(右側)4列の、最終行までの出現頻度を算出する。
スレッドグループG1は、最上位行の上位4列のデータ(例えば「0 3 1 2」)を取得する。そして、スレッドT1は最上位列のデータを、スレッドT2は上位2列目のデータを、スレッドT3は上位3列目のデータを、スレッドT4は上位4列目のデータを、それぞれ担当データとし、それぞれ担当データに対して処理を行う。例えば、スレッドT1の担当データは「0」、スレッドT2の担当データは「3」、スレッドT3の担当データは「1」、スレッドT4の担当データは「2」となる。
スレッドグループG1は、スレッドT1〜T4により、列ごとにデータを処理する(出現頻度を算出又は加算する)。そして、スレッドグループG1は、自グループの担当するデータの出現頻度(ローカル出現頻度と呼ぶ場合がある)を、行単位でGPU140が有するローカルメモリ142上のローカル出現頻度の記憶領域に記憶(加算)する。そして、スレッドグループG1は、最終行まで出現頻度を算出する。スレッドグループG2も同様の処理を行う。なお、以降、各スレッドグループが担当するデータの出現頻度を、ローカル出現頻度と呼ぶ場合がある。
スレッドグループG1及びG2は、自グループが担当するデータのローカル出現頻度の算出が完了する(自グループが担当するデータが終了する)と、メモリ130上の出現頻度領域に、それぞれのローカル出現頻度を加算する。
<第1方式出現頻度算出処理>
図5は、第1方式出現頻度算出処理の処理フローチャートの例を示す図である。GPU140は、例えば、CPU110の指示により、第1方式出現頻度算出処理S100を実行する。なお、第1方式出現頻度算出処理S100の処理フローチャートは、例えば、各スレッドグループが実行する処理の処理フローチャートである。また、図5において、点線で囲まれている処理は、スレッドグループ内の各スレッドが実行する処理である。
スレッドグループは、自スレッドグループが担当する次のデータ群を取得する(S100−1)。次のデータ群とは、例えば、担当するデータの列の次行のデータを示す。スレッドグループは、第1方式出現頻度算出処理S100の処理S100−1において、先頭行から順に担当データ群を取得する。
各スレッドは、自スレッドが担当するデータの数値を認識し、自スレッドグループのローカル出現頻度の記憶領域の担当数値の領域に、1を加算する(S100−2)。各スレッド全てが、処理S100−2を実行する。
図6は、処理S100−1及び処理S100−2の例を示す図である。図6(A)は、1行目のデータ群、図6(B)は2行目のデータ群に対する処理の例を示す図である。なお、図6において、ローカル出現頻度の記憶領域は、左から「0」「1」「2」「3」に、それぞれ対応するもとする。また、以降は、スレッドグループG1の処理について説明する。
図6(A)に示すように、スレッドグループG1は、最初のデータ群「0 3 1 2」を取得する。スレッドT1は、自スレッドの担当するデータの数値が「0」であることを認識し、ローカル出現頻度の記憶領域の数値「0」に対応する箇所(スレッドグループG1のローカル出現頻度の記憶領域の最上位(最も左))に、1を加算する。
同様に、スレッドT2が「3」、スレッドT3が「1」、スレッドT4が「2」について、それぞれの対応箇所に1を加算する。これにより、1行目のデータ群に対する処理が終了する。
次に、図6(B)に示すように、スレッドグループG1は、2行目のデータ「0 2 2 3」を取得する。スレッドT1は、自スレッドの担当するデータの数値が「0」であることを認識し、ローカル出現頻度の記憶領域の数値「0」に対応する箇所に1を加算し、2とする。
同様に、スレッドT2が「2」、スレッドT3が「2」、スレッドT4が「3」について、それぞれの対応箇所に1を加算する。この結果、ローカル出現頻度は、「0」が2、「1」が1、「2」が3、「3」が2と記憶される。
図5の処理フローチャートに戻り、スレッドグループは、自スレッドグループの担当のデータ群が最後か否かを確認する(S100−3)。データ群が最後である場合(これ以上データがない場合)(S100−3のYes)、スレッドグループは、自スレッドグループのローカル出現頻度を、全体の出現頻度(メモリ130の出現頻度領域)に加算し、処理を終了する(S100−4)。
図7は、処理S100−4の例を示す図である。スレッドグループG1及びG2は、それぞれ自スレッドグループの担当データのローカル出現頻度を、図6に示した処理を繰り返すことで算出する。そして、スレッドグループG1及びG2は、ローカル出現頻度を、メモリ130上の出現頻度の記憶領域に加算する。これにより、入力データの出現頻度(合計出現頻度と呼ぶ場合がある)が算出される。
図5の処理フローチャートに戻り、一方、スレッドグループは、自スレッドグループの担当のデータ群が最後でない場合(S100−3のNo)、担当データがなくなるまで、処理S100−1から処理S100−3を繰り返す。
なお、図6(A)(B)における各スレッドがローカル出現頻度を加算する処理、及び図7における各スレッドグループがメモリ130の出現頻度にローカル出現頻度を加算する処理は、アトミック処理である。例えば、図6(B)において、スレッドT2とスレッドT3は、同じ領域に1を加算するため、少なくとも一方のスレッドに、書き込み待ち時間が発生する。
また、スレッドグループが処理を実行する場合、スレッドグループ内のいずれかのスレッドが実行してもよいし、図示しない別のスレッドをスレッドグループの処理を実行するスレッドとして起動し、当該スレッドが実行しても良い。
<第2方式出現頻度算出処理>
図8は、第2方式出現頻度算出処理の処理フローチャートの例を示す図である。GPU140は、例えば、CPU110の指示により、第2方式出現頻度算出処理S200を実行する。なお、第2方式出現頻度算出処理S200の処理フローチャートは、例えば、各スレッドグループが実行する処理の処理フローチャートである。また、図8において、点線で囲まれている処理は、各スレッドが行う処理である。
スレッドグループは、自スレッドグループが担当する次のデータ群を取得する(S200−1)。
各スレッドは、第1関数を実行し、自スレッドの担当データと同一数値のビットが1(ON)となるビット列を生成する(S200−2)。
図9は、処理S200−1及び処理S200−2の例を示す図である。第1関数は、例えば、比較関数のmatch関数を使用する。match関数は、例えば、データ列と指標値を入力すると、データ列内の指標値の存在位置を1にしたビット列を出力する関数である。図9では、スレッドグループG1の2行目のデータ群に対する処理を例として説明する。
図9に示すように、スレッドグループG1は、2行目のデータ群「0 2 2 3」を取得する。スレッドT1は、第1関数を実行し、自スレッドの担当データの「0」が同一データ群内の存在位置を示すビット列を生成する。スレッドT1の担当データの「0」は、「0 2 2 3」の一番左の位置にのみ存在するので、生成されるビット列は「1000」となる。
スレッドT2〜T4もスレッドT1と同様の処理を行う。スレッドT2及びスレッドT3の担当データの「2」は、「0 2 2 3」の左から2番目及び3番目の位置に存在するので、生成されるビット列は「0110」となる。スレッドT4の担当データの「3」は、「0 2 2 3」の一番右の位置に存在するので、生成されるビット列は「0001」となる。
図8の処理フローチャートに戻り、各スレッドは、第2関数を実行し、ビット列で最初に1(ON)が出現するビット位置を取得する(S200−3)。
図10は、処理S200−3の例を示す図である。スレッドT1〜T4は、自スレッドが生成したビット列に対して、第2関数を実行し、ビット列で最初に1が出現するビット位置を取得する。第2関数は、例えば、ffs(ffsll)関数である。ffs関数は、例えば、データ列を入力すると、入力されたデータ列内の最初(または最後)に1が出現する位置を出力する関数である。なお、ビット位置は、左から1〜4となる。
スレッドT1は、一番左(第1ビット)が1であるため、ビット位置「1」を取得する。同様に、スレッドT2は、ビット位置「2」を取得し、スレッドT3は、ビット位置「2」を取得し、スレッドT4は、ビット位置「4」を取得する。
図8の処理フローチャートに戻り、各スレッドは、第2関数の実行結果より、担当データの数値が、データ群内で最初の出現か否かを確認する(S200−4)。すなわち、自スレッドが、ローカル出現頻度の加算処理を行う代表スレッドか否かを判定する。
図11は、処理S200−4の例を示す図である。各スレッドは、担当データの数値がデータ群内で最初の出現か否かを確認する。スレッドは、例えば、スレッド郡内での識別番号を有する。例えば、スレッドT1の識別番号は1、スレッドT2の識別番号は2、スレッドT3の識別番号は3、スレッドT4の識別番号は4である。識別番号は、例えば、自スレッドが担当するデータの位置(データ群内の左からの番号)に対応する識別子である。各スレッドは、自スレッドの識別番号と処理200−3で取得したビット位置が一致する場合、担当データの数値がデータ群内で最初の出現であると判定する。スレッドT1は、識別番号と取得したビット位置が「1」であり一致する。スレッドT2は、識別番号と取得したビット位置が「2」であり一致する。スレッドT4は、識別番号と取得したビット位置が「4」であり一致する。スレッドT1、T2、及びT4は、自スレッドが代表スレッドであると判定する。
一方で、スレッドT3は、識別番号は「3」であるが、取得したビット位置は「2」であり、一致しない。すなわち、スレッドT3は、当該データ群に対する処理において、代表スレッドとはならない。
図8の処理フローチャートに戻り、各スレッドは、担当データの数値がデータ群内での最初の出現である(自スレッドが代表スレッドである)場合(S200−4のYes)、第3関数を実行し、自スレッドの担当データの数値が、データ群内で重複する数(重複数)を取得する(S200−5)。
図12は、処理S200−5の例を示す図である。第3関数は、例えば、popc(popcll)関数である。popc関数は、例えば、データ列を入力すると、データ列内の1(ON)の数を出力する関数である。
代表スレッドであるスレッドT1、スレッドT2、及びスレッドT4は、処理S200−5を実行する。一方で、処理S200−4で一致しなかった(不一致であった)スレッドT3は、処理S200−5を実行しない。
スレッドT1は、第3関数を実行し、ビット列内の1の数(重複数)を算出する。スレッドT1は、重複数「1」を算出する。同様に、スレッドT2は重複数「2」を、スレッドT4は重複数「1」を算出する。
図8の処理フローチャートに戻り、各スレッド(代表スレッド)は、自スレッドグループのローカル出現頻度の記憶領域の担当データの数値に対応する領域に、重複数を加算する(S200−6)。
一方、各スレッドは、担当データの数値がデータ群内での最初の出現でない場合(S200−4のNo)、処理S200−5及び処理S200−6を実行しない。
図13は、処理S200−6の例を示す図である。処理S200−4で一致したスレッドであるスレッドT1、スレッドT2、及びスレッドT4は、処理S200−6を実行する。一方で、処理S200−4で一致しなかった(不一致であった)スレッドT3は、処理S200−6を実行しない。
スレッドT1は、ローカル出現頻度の記憶領域の「0」に対応する箇所に、処理S200−5で算出した重複数「1」を加算する。同様に、スレッドT4は、ローカル出現頻度の記憶領域の「3」に対応する箇所に、処理S200−5で算出した重複数「1」を加算する。
一方、スレッドT2は、ローカル出現頻度の記憶領域の「2」に対応する箇所に、処理S200−5で算出した重複数「2」を加算する。
図8の処理フローチャートに戻り、スレッドグループは、自スレッドグループの担当のデータ群が最後か否かを確認する(S200−7)。データ群が最後である場合(S200−7のYes)、スレッドグループは、自スレッドグループのローカル出現頻度を、全体の出現頻度(メモリ130の出現頻度領域)に加算し、処理を終了する(S200−8)。処理S200−8は、例えば、第1方式出現頻度算出処理S100における処理S100−4(図7)と同様である。
一方、スレッドグループは、自スレッドグループの担当のデータ群が最後でない場合(S200−7のNo)、担当データがなくなるまで、処理S200−1からS200−6を繰り返す。
なお、図13における各スレッドがローカル出現頻度を加算する処理、及び図7における各スレッドグループがメモリ130の出現頻度にローカル出現頻度を加算する処理が、アトミック処理である。
第2方式出現頻度算出処理において、情報処理装置100は、同一データ群に同一値のデータが重複する場合、代表スレッドのみがローカル出現頻度の加算処理を行うため、ローカル出現頻度を加算するアトミック処理の回数を抑制できる。
また、第2関数は、clz(clzll)関数を使用しても良い。clz関数は、例えば、データ列を入力すると、データ列の先頭(もしくは最後尾)から、連続して存在する0の数を出力する。この出力数の次の位置に1が出現することがわかるため、ffs関数と同様の出力を得ることができる。
<方式判定処理>
情報処理装置100は、第1方式または第2方式出現頻度算出処理を用いて、入力データを処理する。情報処理装置100は、データ処理S300において、入力データに応じて、第1方式または第2方式出現頻度算出処理を選択する。
情報処理装置100は、処理を高速化させるため、例えば、アトミック処理を行う回数が少ない第2方式出現頻度算出処理を選択する。なお、例えば、重複する数値がない入力データで第1方式及び第2方式出現頻度算出処理を行った時、第2方式出現頻度算出方式のほうが出現頻度の算出が早い場合、情報処理装置100は、常に第2方式出現頻度算出方式を選択しても良い。
図14は、データ処理S300の処理フローチャートの例を示す図である。情報処理装置100は、データ処理S300において、データが入力されるのを待ち受ける(S300−1のNo)。
情報処理装置100は、データが入力されると(S300−1のYes)、方式判定処理を行う(S400)。方式判定処理S400は、入力データに応じて方式を選択する処理である。
情報処理装置100は、選択した方式が第1方式である場合(S300−2の第1方式)、第1方式出現頻度算出処理S100を実行し、再度入力データ待ち(S300−1)に移行する。
一方、情報処理装置100は、選択した方式が第2方式である場合(S300−2の第2方式)、第2方式出現頻度算出処理S200を実行し、再度入力データ待ち(S300−1)に移行する。
<1.データ種別による方式判定>
図15は、方式判定処理S400の処理フローチャートの例を示す図である。情報処理装置100は、入力データの種別を取得する(S400−1)。情報処理装置100は、データ種別が画像または動画である場合(S400−2のYes)、第2方式出現頻度算出処理を行うと判定し(S400−3)、処理を終了する。
一方、情報処理装置100は、データ種別が画像または動画でない場合(S400−2のNo)、第1方式出現頻度算出処理を行うと判定し(S400−4)、処理を終了する。
画像や動画データは、一般的に、隣接するピクセルは同一色である、すなわち、同一値のデータであることが多い。言い換えると、画像や動画データは、同一値のデータを多く含むことが想定できるため、第2方式出現頻度算出処理を実行することで、アトミック処理の回数を抑制することができ、処理の高速化が可能となる。
<2.要素数による方式判定>
図16は、方式判定処理S400の処理フローチャートの例を示す図である。情報処理装置100は、入力データのデータ数及び要素数(データの値の種類の数)を取得する(S400−1)。情報処理装置100は、データ数を要素数で除算する(S400−2)。
情報処理装置100は、除算結果が閾値以上である場合(S400−3のYes)、第2方式出現頻度算出処理を行うと判定し(S400−4)、処理を終了する。
一方、情報処理装置100は、除算結果が閾値以上でない場合(S400−3のNo)、第1方式出現頻度算出処理を行うと判定し(S400−5)、処理を終了する。
除算結果は、各数値の重複数の平均値を示す。よって、除算結果が大きいほど、入力データ内に重複する数値が多い(重複する可能性が高い)ことを示す。そのため、情報処理装置100は、除算結果が閾値より大きい時、第2方式出現頻度算出処理のほうが処理の高速化が可能と判定し、第2方式出現頻度算出処理を選択する。
[その他の実施の形態]
例えば、方式判定処理S400は、CPU110が実行しても良いし、GPU140が実行しても良い。
以下、まとめると付記のようになる。
(付記1)
情報処理装置が有するGPU(グラフィックス プロセッシング ユニット)実行させるプログラムであって、
複数のスレッドで構成されるスレッドグループを1以上構築する構築処理と、
前記スレッドグループは、構成するスレッドと同一数のデータを含むデータ群を入力データから取得する取得処理と、
前記スレッドグループの複数のスレッドそれぞれは、前記データ群のうち1つのデータを担当し、
前記スレッドは、自スレッドが担当するデータの第1の数値が前記データ群において重複しない場合、前記第1の数値の出現頻度を記憶する第1記憶領域に1を加算し、
前記第1の数値が前記データ群において重複する場合、自スレッドが前記第1の数値のデータを担当するスレッド群に1つ存在する代表スレッドであるとき、前記第1記憶領域に前記重複する数を示す重複数を加算する加算処理と、を実行する
出現頻度算出プログラム。
(付記2)
前記第1記憶領域は、数値ごとの出現頻度をスレッドグループごとに記憶するローカル出現頻度記憶領域に含まれ、
前記ローカル出現頻度記憶領域は、前記GPUが有するメモリ内に存在する
付記1記載の出現頻度算出プログラム。
(付記3)
前記取得処理及び前記加算処理を、前記入力データの全てについて実行し、
前記スレッドグループは、自スレッドグループの前記ローカル出現頻度記憶領域に記憶した出現頻度を、全スレッドグループの出現頻度の合計を記憶する合計出現頻度記憶領域に加算する合計加算処理を実行する
付記2記載の出現頻度算出プログラム。
(付記4)
前記合計出現頻度記憶領域は、前記GPUが有するメモリ以外のメモリであって、前記情報処理装置が有するメモリ内に存在する
付記3記載の出現頻度算出プログラム。
(付記5)
前記加算処理の前記第1の数値が重複するか否かの判定において、前記データ群における対象数値の存在する位置を1とするビット列を生成する第1関数を使用する
付記1記載の出現頻度算出プログラム。
(付記6)
前記第1関数は、match関数を含む
付記5記載の出現頻度算出プログラム。
(付記7)
前記加算処理の前記代表スレッドか否かの判定において、前記ビット列内で1が最初又は最後に出現する位置を返す第2関数を使用する
付記5記載の出現頻度算出プログラム。
(付記8)
前記第2関数は、ffs関数を含む
付記7記載の出現頻度算出プログラム。
(付記9)
前記加算処理の前記重複数の算出において、前記ビット列内の1の数を返す第3関数を使用する
付記7記載の出現頻度算出プログラム。
(付記10)
前記第3関数は、popc関数を含む
付記9記載の出現頻度算出プログラム。
(付記11)
さらに、前記加算処理に加え、前記第1の数値の前記データ群における重複の有無に関わらず、前記スレッドが前記第1記憶領域に1を加算する第2加算処理と、を有し、
前記入力データに応じて前記加算処理または前記第2加算処理のいずれか一方を選択する選択処理を、実行する
付記1記載の出現頻度算出プログラム。
(付記12)
前記入力データが画像データである場合、前記加算処理を実行する
付記11記載の出現頻度算出プログラム。
(付記13)
前記画像データの画像は、静止画及び動画を含む
付記12記載の出現頻度算出プログラム。
(付記14)
前記入力データ内の各数値の平均重複数が閾値以上に多い場合、前記加算処理を実行する
付記11記載の出現頻度算出プログラム。
(付記15)
前記平均重複数は、前記入力データのデータ数を前記入力データの要素数で除算することで算出する
付記14記載の出現頻度算出プログラム。
(付記16)
前記GPU以外の前記情報処理装置が有するプロセッサに前記選択処理を実行させる
付記11記載の出現頻度算出プログラム。
(付記17)
複数のスレッドで構成されるスレッドグループを1以上構築する構築処理と、
前記スレッドグループは、構成するスレッドと同一数のデータを含むデータ群を入力データから取得する取得処理と、
前記スレッドグループの複数のスレッドそれぞれは、前記データ群のうち1つのデータを担当し、
前記スレッドは、自スレッドが担当するデータの第1の数値が前記データ群において重複しない場合、前記第1の数値の出現頻度を記憶する第1記憶領域に1を加算し、
前記第1の数値が前記データ群において重複する場合、自スレッドが前記第1の数値のデータを担当するスレッド群に1つ存在する代表スレッドであるとき、前記第1記憶領域に前記重複する数を示す重複数を加算する加算処理と、を実行する
情報処理装置が有するGPU(グラフィックス プロセッシング ユニット)。
(付記18)
複数のスレッドで構成されるスレッドグループを1以上構築する構築処理と、
前記スレッドグループは、構成するスレッドと同一数のデータを含むデータ群を入力データから取得する取得処理と、
前記スレッドグループの複数のスレッドそれぞれは、前記データ群のうち1つのデータを担当し、
前記スレッドは、自スレッドが担当するデータの第1の数値が前記データ群において重複しない場合、前記第1の数値の出現頻度を記憶する第1記憶領域に1を加算し、
前記第1の数値が前記データ群において重複する場合、自スレッドが前記第1の数値のデータを担当するスレッド群に1つ存在する代表スレッドであるとき、前記第1記憶領域に前記重複する数を示す重複数を加算する加算処理とを、自装置が有するGPU(グラフィックス プロセッシング ユニット)に実行させる
情報処理装置。
(付記19)
複数のスレッドで構成されるスレッドグループを1以上構築する構築し、
前記スレッドグループは、構成するスレッドと同一数のデータを含むデータ群を入力データから取得し、
前記スレッドグループの複数のスレッドそれぞれは、前記データ群のうち1つのデータを担当し、
前記スレッドは、自スレッドが担当するデータの第1の数値が前記データ群において重複しない場合、前記第1の数値の出現頻度を記憶する第1記憶領域に1を加算し、
前記第1の数値が前記データ群において重複する場合、自スレッドが前記第1の数値のデータを担当するスレッド群に1つ存在する代表スレッドであるとき、前記第1記憶領域に前記重複する数を示す重複数を加算する
出現頻度算出方法。
10 :情報処理システム
100 :情報処理装置
110 :CPU
120 :ストレージ
121 :データ処理プログラム
1211 :方式判定モジュール
130 :メモリ
110 :GPU
1411 :第1方式出現頻度算出プログラム
1412 :第2方式出現頻度算出プログラム
1413 :第1関数プログラム
1414 :第2関数プログラム
1415 :第3関数プログラム
142 :ローカルメモリ
200 :入力データ

Claims (10)

  1. 情報処理装置が有するGPU(グラフィックス プロセッシング ユニット)に実行させるプログラムであって、
    複数のスレッドで構成されるスレッドグループを1以上構築する構築処理と、
    前記スレッドグループは、構成するスレッドと同一数のデータを含むデータ群を入力データから取得する取得処理と、
    前記スレッドグループの複数のスレッドそれぞれは、前記データ群のうち1つのデータを担当し、
    前記スレッドは、自スレッドが担当するデータの第1の数値が前記データ群において重複しない場合、前記第1の数値の出現頻度を記憶する第1記憶領域に1を加算し、
    前記第1の数値が前記データ群において重複する場合、自スレッドが前記第1の数値のデータを担当するスレッド群に1つ存在する代表スレッドであるとき、前記第1記憶領域に前記重複する数を示す重複数を加算する加算処理と、を実行する
    出現頻度算出プログラム。
  2. 前記第1記憶領域は、数値ごとの出現頻度をスレッドグループごとに記憶するローカル出現頻度記憶領域に含まれ、
    前記取得処理及び前記加算処理を、前記入力データの全てについて実行し、
    前記スレッドグループは、自スレッドグループの前記ローカル出現頻度記憶領域に記憶した出現頻度を、全スレッドグループの出現頻度の合計を記憶する合計出現頻度記憶領域に加算する合計加算処理を実行する
    請求項1記載の出現頻度算出プログラム。
  3. 前記加算処理の前記第1の数値が重複するか否かの判定において、前記データ群における対象数値の存在する位置を1とするビット列を生成する第1関数を使用する
    請求項1記載の出現頻度算出プログラム。
  4. 前記加算処理の前記代表スレッドか否かの判定において、前記ビット列内で1が最初又は最後に出現する位置を返す第2関数を使用する
    請求項3記載の出現頻度算出プログラム。
  5. 前記加算処理の前記重複数の算出において、前記ビット列内の1の数を返す第3関数を使用する
    請求項4記載の出現頻度算出プログラム。
  6. さらに、前記加算処理に加え、前記第1の数値の前記データ群における重複の有無に関わらず、前記スレッドが前記第1記憶領域に1を加算する第2加算処理と、を有し、
    前記入力データに応じて前記加算処理または前記第2加算処理のいずれか一方を選択する選択処理を、実行する
    請求項1記載の出現頻度算出プログラム。
  7. 前記入力データ内の各数値の平均重複数が閾値以上に多い場合、前記加算処理を実行する
    請求項6記載の出現頻度算出プログラム。
  8. 複数のスレッドで構成されるスレッドグループを1以上構築する構築処理と、
    前記スレッドグループは、構成するスレッドと同一数のデータを含むデータ群を入力データから取得する取得処理と、
    前記スレッドグループの複数のスレッドそれぞれは、前記データ群のうち1つのデータを担当し、
    前記スレッドは、自スレッドが担当するデータの第1の数値が前記データ群において重複しない場合、前記第1の数値の出現頻度を記憶する第1記憶領域に1を加算し、
    前記第1の数値が前記データ群において重複する場合、自スレッドが前記第1の数値のデータを担当するスレッド群に1つ存在する代表スレッドであるとき、前記第1記憶領域に前記重複する数を示す重複数を加算する加算処理と、を実行する
    情報処理装置が有するGPU(グラフィックス プロセッシング ユニット)。
  9. 複数のスレッドで構成されるスレッドグループを1以上構築する構築処理と、
    前記スレッドグループは、構成するスレッドと同一数のデータを含むデータ群を入力データから取得する取得処理と、
    前記スレッドグループの複数のスレッドそれぞれは、前記データ群のうち1つのデータを担当し、
    前記スレッドは、自スレッドが担当するデータの第1の数値が前記データ群において重複しない場合、前記第1の数値の出現頻度を記憶する第1記憶領域に1を加算し、
    前記第1の数値が前記データ群において重複する場合、自スレッドが前記第1の数値のデータを担当するスレッド群に1つ存在する代表スレッドであるとき、前記第1記憶領域に前記重複する数を示す重複数を加算する加算処理とを、自装置が有するGPU(グラフィックス プロセッシング ユニット)に実行させる
    情報処理装置。
  10. 複数のスレッドで構成されるスレッドグループを1以上構築する構築し、
    前記スレッドグループは、構成するスレッドと同一数のデータを含むデータ群を入力データから取得し、
    前記スレッドグループの複数のスレッドそれぞれは、前記データ群のうち1つのデータを担当し、
    前記スレッドは、自スレッドが担当するデータの第1の数値が前記データ群において重複しない場合、前記第1の数値の出現頻度を記憶する第1記憶領域に1を加算し、
    前記第1の数値が前記データ群において重複する場合、自スレッドが前記第1の数値のデータを担当するスレッド群に1つ存在する代表スレッドであるとき、前記第1記憶領域に前記重複する数を示す重複数を加算する
    出現頻度算出方法。
JP2020098766A 2020-06-05 2020-06-05 出現頻度算出プログラム、グラフィックス プロセッシング ユニット、情報処理装置、及び出現頻度算出方法 Withdrawn JP2021192187A (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2020098766A JP2021192187A (ja) 2020-06-05 2020-06-05 出現頻度算出プログラム、グラフィックス プロセッシング ユニット、情報処理装置、及び出現頻度算出方法
US17/200,948 US11488280B2 (en) 2020-06-05 2021-03-15 Computer-readable recording medium recording appearance frequency calculation program, information processing apparatus, and appearance frequency calculation method

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2020098766A JP2021192187A (ja) 2020-06-05 2020-06-05 出現頻度算出プログラム、グラフィックス プロセッシング ユニット、情報処理装置、及び出現頻度算出方法

Publications (1)

Publication Number Publication Date
JP2021192187A true JP2021192187A (ja) 2021-12-16

Family

ID=78817708

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2020098766A Withdrawn JP2021192187A (ja) 2020-06-05 2020-06-05 出現頻度算出プログラム、グラフィックス プロセッシング ユニット、情報処理装置、及び出現頻度算出方法

Country Status (2)

Country Link
US (1) US11488280B2 (ja)
JP (1) JP2021192187A (ja)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2021192187A (ja) * 2020-06-05 2021-12-16 富士通株式会社 出現頻度算出プログラム、グラフィックス プロセッシング ユニット、情報処理装置、及び出現頻度算出方法
TWI775253B (zh) * 2020-12-24 2022-08-21 宏碁股份有限公司 高風險用藥路徑的計算方法

Family Cites Families (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP6020091B2 (ja) 2012-11-27 2016-11-02 富士通株式会社 演算処理装置の制御プログラム、演算処理装置の制御方法および演算処理装置
US9513907B2 (en) 2013-08-06 2016-12-06 Intel Corporation Methods, apparatus, instructions and logic to provide vector population count functionality
US9921838B2 (en) * 2015-10-02 2018-03-20 Mediatek Inc. System and method for managing static divergence in a SIMD computing architecture
JP6679943B2 (ja) * 2016-01-15 2020-04-15 富士通株式会社 検知プログラム、検知方法および検知装置
JP6827266B2 (ja) * 2016-01-15 2021-02-10 富士通株式会社 検知プログラム、検知方法および検知装置
JP7087695B2 (ja) 2018-06-07 2022-06-21 株式会社リコー 学習装置および学習方法
US11714875B2 (en) * 2019-12-28 2023-08-01 Intel Corporation Apparatuses, methods, and systems for instructions of a matrix operations accelerator
JP2021192187A (ja) * 2020-06-05 2021-12-16 富士通株式会社 出現頻度算出プログラム、グラフィックス プロセッシング ユニット、情報処理装置、及び出現頻度算出方法

Also Published As

Publication number Publication date
US11488280B2 (en) 2022-11-01
US20210383499A1 (en) 2021-12-09

Similar Documents

Publication Publication Date Title
KR100997024B1 (ko) 스캔 연산을 수행하기 위한 시스템, 방법 및 컴퓨터 판독가능한 기록 매체
US20190266217A1 (en) Apparatus and method for matrix computation
JP6605573B2 (ja) 並列ディシジョン・ツリー・プロセッサー・アーキテクチャ
JP4339381B2 (ja) 共有メモリ型マルチプロセッサシステム及びその情報処理方法
US20210182263A1 (en) Systems and methods for performing data processing operations using variable level parallelism
EP1640875B1 (en) Method and system for multithread processing of spreadsheet chain calculations
JP6020091B2 (ja) 演算処理装置の制御プログラム、演算処理装置の制御方法および演算処理装置
US20090132878A1 (en) System, method, and computer program product for performing a scan operation on a sequence of single-bit values using a parallel processor architecture
US20180011693A1 (en) Methods and apparatus to eliminate partial-redundant vector loads
JP2021192187A (ja) 出現頻度算出プログラム、グラフィックス プロセッシング ユニット、情報処理装置、及び出現頻度算出方法
JP6659724B2 (ja) 並列プロセッサカーネルのディスパッチサイズのコンカレンシーファクタを決定するシステム及び方法
US11630986B2 (en) Graph conversion method
US9830731B2 (en) Methods of a graphics-processing unit for tile-based rendering of a display area and graphics-processing apparatus
US10872394B2 (en) Frequent pattern mining method and apparatus
US8930929B2 (en) Reconfigurable processor and method for processing a nested loop
KR101699685B1 (ko) 명령어 오퍼랜드 변경 장치 및 방법
CN116134416A (zh) 避免张量内存布局中存储体冲突和流水线冲突的方法
US9280330B2 (en) Apparatus and method for executing code
JP7403465B2 (ja) 短絡高速化のための複合条件の並べ替え
US9569470B2 (en) Managing sharing relationship of tables
JP7302727B2 (ja) ループアンローリング処理装置、方法およびプログラム
JP7302728B2 (ja) ループアンローリング処理装置、方法およびプログラム
US20240087076A1 (en) Graph data calculation method and apparatus
KR102628658B1 (ko) 뉴럴 프로세서 및 뉴럴 프로세서의 제어 방법
US8290917B2 (en) Reordering of data elements in a data parallel system

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20230309

A761 Written withdrawal of application

Free format text: JAPANESE INTERMEDIATE CODE: A761

Effective date: 20240129