(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公表特許公報(A)
(11)【公表番号】
(43)【公表日】2024-11-21
(54)【発明の名称】ベクトルのシャッフル方法、プロセッサ及び電子機器
(51)【国際特許分類】
G06F 9/315 20180101AFI20241114BHJP
【FI】
G06F9/315 S
【審査請求】有
【予備審査請求】未請求
(21)【出願番号】P 2024534616
(86)(22)【出願日】2022-12-08
(85)【翻訳文提出日】2024-06-14
(86)【国際出願番号】 CN2022137500
(87)【国際公開番号】W WO2023104143
(87)【国際公開日】2023-06-15
(31)【優先権主張番号】202111508098.8
(32)【優先日】2021-12-10
(33)【優先権主張国・地域又は機関】CN
(81)【指定国・地域】
(71)【出願人】
【識別番号】512110547
【氏名又は名称】▲龍▼芯中科技▲術▼股▲フン▼有限公司
【氏名又は名称原語表記】LOONGSON TECHNOLOGY CORPORATION LIMITED
【住所又は居所原語表記】Loongson Industrial Park, Building 2, Zhongguancun Environmental Protection Park, Haidian District, Beijing, China
(74)【代理人】
【識別番号】110002952
【氏名又は名称】弁理士法人鷲田国際特許事務所
(72)【発明者】
【氏名】ワン ウェンシアン
【テーマコード(参考)】
5B033
【Fターム(参考)】
5B033AA10
5B033BE05
5B033CA18
(57)【要約】
本願は、ベクトルのシャッフル方法、プロセッサ及び電子機器を提供する。方法は、レジスタ識別子及びシャッフルパラメータを含む命令を受信するステップであって、レジスタ識別子は、ソースレジスタ識別子及びデスティネーションレジスタ識別子を含み、ソースレジスタ識別子は、ソースレジスタを示すためのものであり、ソースレジスタは、ベクトルシャッフル操作実行時に操作されるソース要素を記憶するレジスタであり、デスティネーションレジスタ識別子は、デスティネーションレジスタを示すためのものであり、デスティネーションレジスタは、ベクトルシャッフル操作実行後に得られるターゲット要素を記憶するレジスタであり、シャッフルパラメータは、ソース要素に対するベクトルシャッフル操作の実行時に準拠するパラメータを指示するためのものである、ステップと、命令を実行し、シャッフルパラメータに従ってソースレジスタから取得されたソース要素に対してベクトルシャッフル操作を実行するとともに、ベクトルシャッフル操作後のターゲット要素を取得するステップと、ターゲット要素をデスティネーションレジスタに書き込むステップと、を含む。本願は、特定の機能のベクトルシャッフル操作を命令1つで実装することができ、特定の機能の実行効率を向上させる。
【選択図】
図1
【特許請求の範囲】
【請求項1】
レジスタ識別子及びシャッフルパラメータを含む命令を受信するステップであって、前記レジスタ識別子は、ソースレジスタ識別子及びデスティネーションレジスタ識別子を含み、前記ソースレジスタ識別子は、ソースレジスタを示すためのものであり、前記ソースレジスタは、ベクトルシャッフル操作実行時に操作されるソース要素を記憶するレジスタであり、前記デスティネーションレジスタ識別子は、デスティネーションレジスタを示すためのものであり、前記デスティネーションレジスタは、前記ベクトルシャッフル操作実行後に得られるターゲット要素を記憶するレジスタであり、前記シャッフルパラメータは、前記ソース要素に対するベクトルシャッフル操作の実行時に準拠するパラメータを指示するためのものである、ステップと、
前記命令を実行し、前記シャッフルパラメータに従って前記ソースレジスタから取得されたソース要素に対してベクトルシャッフル操作を実行するとともに、前記ベクトルシャッフル操作後のターゲット要素を取得するステップと、
前記ターゲット要素を前記デスティネーションレジスタに書き込むステップと、を含む、ベクトルのシャッフル方法。
【請求項2】
前記シャッフルパラメータに従って前記ソースレジスタから取得されたソース要素に対してベクトルシャッフル操作を実行するとともに、前記ベクトルシャッフル操作後のターゲット要素を取得するステップは、
前記シャッフルパラメータに従い、ベクトルシャッフル操作に必要な前記ソース要素の前記ソースレジスタにおける位置情報及びソース要素の数を決定するステップであって、選択された前記ソース要素の数は1つ又は複数である、ステップと、
決定された前記位置情報及びソース要素の数に従い、前記ソースレジスタからソース要素を選択するステップと、
すべての選択された前記ソース要素をターゲット要素として決定するステップと、を含む、ことを特徴とする請求項1に記載のベクトルのシャッフル方法。
【請求項3】
前記シャッフルパラメータはインデックス値及びオペコードを含み、前記インデックス値は、ベクトルシャッフル操作に必要な各ソース要素の前記ソースレジスタにおける位置情報を指示するためのものであり、前記オペコードは、前記ソースレジスタとデスティネーションレジスタに対する操作を示すためのものであり、
決定された前記位置情報及びソース要素の数に従い、前記ソースレジスタからソース要素を選択するステップは、
前記インデックス値及び前記オペコードに従い、ソース要素を取得する選択ルールを決定するステップと、
ソースレジスタから、前記選択ルールに遵い、各インデックス値によって指示されるソース要素をそれぞれ取得するステップと、を含む、ことを特徴とする請求項2に記載のベクトルのシャッフル方法。
【請求項4】
前記インデックス値及び前記オペコードに従い、ソース要素を取得する選択ルールを決定するステップは、
前記インデックス値の数と前記ソース要素の数が異なる場合に、前記インデックス値の数に従い、前記ソース要素のグループ化方式を決定して、前記グループ化方式及び前記オペコードに従い、前記選択ルールを決定するステップと、
前記インデックス値の数と前記ソース要素の数が同じである場合に、前記オペコードに従い、前記選択ルールを決定するステップと、を含む、ことを特徴とする請求項3に記載のベクトルのシャッフル方法。
【請求項5】
前記オペコードは第1のオペコードであり、且つ前記インデックス値の数と前記ソース要素の数は異なり、
ソースレジスタから、前記選択ルールに遵い、各インデックス値によって指示されるソース要素をそれぞれ取得するステップは、
前記ソースレジスタ内の隣接する要素をN1個ごとに1つのグループの要素グループとして構成するステップであって、前記要素のデータタイプは、バイト、ハーフワード、ワードのいずれか1つであり、N1は0よりも大きい正の整数である、ステップと、
各要素グループにおける要素を初期ソース要素として決定するステップと、
前記初期ソース要素から、各インデックス値によって指示されるソース要素をそれぞれ取得するステップであって、各前記要素グループから選択されたソース要素の数はn1個である、ステップと、を含む、ことを特徴とする請求項4に記載のベクトルのシャッフル方法。
【請求項6】
前記隣接する要素は、前記ソースレジスタにおいて位置が順次隣接する要素であり、隣接する複数の要素グループにおける要素アドレスは、部分的に同じまたは完全に異なることがあり、
各要素グループに含まれている要素のデータタイプは同じであり、異なる要素グループに含まれている要素のデータタイプは同じ又は異なる、ことを特徴とする請求項5に記載のベクトルのシャッフル方法。
【請求項7】
前記オペコードは第2のオペコードであり、且つ前記インデックス値の数と前記ソース要素の数は同じであり、
ソースレジスタから、前記選択ルールに遵い、各インデックス値によって指示されるソース要素をそれぞれ取得するステップは、
前記ソースレジスタにおいて、N2ビットごとのM
N2個の要素から、各インデックス値によって指示されるソース要素をそれぞれ取得するステップを含み、前記要素のデータタイプはダブルワードであり、N2ビットごとのM
N2個の要素から選択されたソース要素の数はn2個であり、N2、M
N2、及びn2はいずれも0よりも大きい正の整数である、ことを特徴とする請求項4に記載のベクトルのシャッフル方法。
【請求項8】
決定された前記位置情報及びソース要素の数に従い、前記ソースレジスタからソース要素を選択するステップの前、
中間ベクトルを作成するステップをさらに含み、前記中間ベクトルは少なくとも1つの中間ベクトルパラメータを含み、要素グループが存在している場合に、前記中間ベクトルパラメータの数は前記要素グループの数と等しいが、要素グループが存在していない場合に、前記中間ベクトルパラメータの数は前記ソース要素の数と等しく、
前記ソースレジスタからソース要素を選択するステップは、
選択された各前記ソース要素を前記中間ベクトルの対応する中間ベクトルパラメータにそれぞれ記憶するステップを含み、前記中間ベクトルパラメータは選択されたソース要素と一対一に対応する関係があり、
前記ターゲット要素を前記デスティネーションレジスタに書き込むステップは、
前記シャッフルパラメータに従い、各前記中間ベクトルパラメータのコンテンツを前記デスティネーションレジスタの対応する位置に書き込むステップを含む、ことを特徴とする請求項5~7のいずれか1項に記載のベクトルのシャッフル方法。
【請求項9】
前記オペコードは第3のオペコードであり、前記インデックス値は、第1のインデックス値、第2のインデックス値、第3のインデックス値、及び第4のインデックス値を含み、前記第1のインデックス値、第2のインデックス値、第3のインデックス値、及び第4のインデックス値はそれぞれ、異なる位置をインデックスし、前記ソースレジスタは第1のソースレジスタと第2のソースレジスタを含み、
ソースレジスタから、前記選択ルールに遵い、各インデックス値によって指示されるソース要素をそれぞれ取得するステップは、
前記第1のソースレジスタにおいて、N3ビットごとのM
N3個の要素から、第1のインデックス値と第2のインデックス値によって指示されるソース要素をそれぞれ取得するステップと、
前記第2のソースレジスタにおいて、N3ビットごとのM
N3個の要素から、第3のインデックス値と第4のインデックス値によって指示されるソース要素をそれぞれ取得するステップであって、前記要素のデータタイプはワードであり、N3ビットごとのM
N3個の要素から選択されたソース要素の数はn3個であり、N3、M
N3、及びn3はいずれも0よりも大きい正の整数である、ステップと、を含み、
前記ターゲット要素を前記デスティネーションレジスタに書き込むステップは、
前記第1のインデックス値よって指示されるソース要素を第1のターゲット要素として決定して、第2のインデックス値よって指示されるソース要素を第2のターゲット要素として決定するステップと、
前記第3のインデックス値よって指示されるソース要素を第3のターゲット要素として決定して、第4のインデックス値よって指示されるソース要素を第4のターゲット要素として決定するステップと、
前記第1のターゲット要素と前記第2のターゲット要素を前記デスティネーションレジスタの第1の位置に書き込むとともに、前記第3のターゲット要素と前記第4のターゲット要素を前記デスティネーションレジスタの第2の位置に書き込むステップと、を含む、ことを特徴とする請求項4に記載のベクトルのシャッフル方法。
【請求項10】
前記オペコードは第4のオペコードであり、
ソースレジスタから、前記選択ルールに遵い、各インデックス値によって指示されるソース要素をそれぞれ取得するステップは、
前記ソースレジスタにおいて、M
n4個の要素から、各インデックス値によって指示されるソース要素をそれぞれ取得するステップを含み、前記要素のデータタイプはダブルワードであり、選択されたソース要素の数はn4個であり、前記M
n4とn4はいずれも0よりも大きい正の整数である、ことを特徴とする請求項4に記載のベクトルのシャッフル方法。
【請求項11】
前記オペコードは第5のオペコードであり、前記インデックス値は第1のインデックス値と第3のインデックス値を含み、前記第1のインデックス値と第3のインデックス値はそれぞれ、異なる位置をインデックスし、前記ソースレジスタは第1のソースレジスタと第2のソースレジスタを含み、
ソースレジスタから、前記選択ルールに遵い、各インデックス値によって指示されるソース要素をそれぞれ取得するステップは、
前記第1のソースレジスタにおいて、M
n5個の要素から、第1のインデックス値によって指示される第1のソース要素を取得するステップと、前記第2のソースレジスタにおいて、M
n5個の要素から、第3のインデックス値によって指示される第2のソース要素を取得するステップと、を含み、前記要素のデータタイプは4ワードであり、選択されたソース要素の数はn5個であり、n5は0よりも大きい正の整数であり、
前記ターゲット要素を前記デスティネーションレジスタに書き込むステップは、
第1のソース要素と第2のソース要素をそれぞれターゲット要素として決定して、前記デスティネーションレジスタの対応する位置に書き込むステップを含む、ことを特徴とする請求項4に記載のベクトルのシャッフル方法。
【請求項12】
前記ソースレジスタの数は1つ又は複数であり、前記デスティネーションレジスタの数は1つであり、
前記ソースレジスタの数が1つである場合に、前記ソースレジスタ識別子は前記デスティネーションレジスタ識別子と異なり、
前記ソースレジスタの数が複数である場合に、すべての前記ソースレジスタの各ソースレジスタ識別子はいずれも前記デスティネーションレジスタ識別子と異なるか、または、前記ソースレジスタの数が複数である場合に、すべての前記ソースレジスタには、前記デスティネーションレジスタ識別子と同じであるソースレジスタ識別子が1つ存在している、ことを特徴とする請求項1~11のいずれか1項に記載のベクトルのシャッフル方法。
【請求項13】
データ要素を記憶するためのソースレジスタ、及びターゲットレジスタを含む複数のベクトルレジスタと、
ソースレジスタ識別子及びデスティネーションレジスタ識別子を含むレジスタ識別子、及びシャッフルパラメータを含むベクトルシャッフル命令を復号化するための復号化ユニットと、
前記ベクトルシャッフル命令に応答し、前記シャッフルパラメータに従って前記ソースレジスタから取得されたソース要素に対してベクトルシャッフル操作を実行するとともに、前記ベクトルシャッフル操作後のターゲット要素を取得して、前記ターゲット要素を前記デスティネーションレジスタに書き込む実行ユニットと、を含む、プロセッサ。
【請求項14】
前記実行ユニットは、前記シャッフルパラメータに従い、前記ソース要素の前記ソースレジスタにおける位置情報及びソース要素の数を決定し、選択された前記ソース要素の数は1つ又は複数であり、決定された前記位置情報及びソース要素の数に従い、前記ソースレジスタからソース要素を選択し、すべての選択された前記ソース要素をターゲット要素として決定する、ことを特徴とする請求項13に記載のプロセッサ。
【請求項15】
前記シャッフルパラメータはインデックス値及びオペコードを含み、前記インデックス値は、ベクトルシャッフル操作に必要な各ソース要素の前記ソースレジスタにおける位置情報を指示するためのものであり、前記オペコードは、前記ソースレジスタとデスティネーションレジスタに対する操作を示すためのものであり、
前記実行ユニットは、前記インデックス値及び前記オペコードに従い、ソース要素を取得する選択ルールを決定し、ソースレジスタから、前記選択ルールに遵い、各インデックス値によって指示されるソース要素をそれぞれ取得する、ことを特徴とする請求項14に記載のプロセッサ。
【請求項16】
前記実行ユニットは、前記インデックス値の数と前記ソース要素の数が異なる場合に、前記インデックス値の数に従い、前記ソース要素のグループ化方式を決定して、前記グループ化方式及び前記オペコードに従い、前記選択ルールを決定し、前記インデックス値の数と前記ソース要素の数が同じである場合に、前記オペコードに従い、前記選択ルールを決定する、ことを特徴とする請求項15に記載のプロセッサ。
【請求項17】
前記オペコードは第1のオペコードであり、且つ前記インデックス値の数と前記ソース要素の数は異なり、
前記実行ユニットは、前記ソースレジスタ内の隣接する要素をN1個ごとに1つのグループの要素グループとして構成し、前記要素のデータタイプは、バイト、ハーフワード、ワードのいずれか1つであり、N1は0よりも大きい正の整数であり、各要素グループにおける要素を初期ソース要素として決定し、前記初期ソース要素から、各インデックス値によって指示されるソース要素をそれぞれ取得し、各前記要素グループから選択されたソース要素の数はn1個である、ことを特徴とする請求項16に記載のプロセッサ。
【請求項18】
前記隣接する要素は、前記ソースレジスタにおいて位置が順次隣接する要素であり、隣接する複数の要素グループにおける要素アドレスは、部分的に同じまたは完全に異なることがあり、
各要素グループに含まれている要素のデータタイプは同じであり、異なる要素グループに含まれている要素のデータタイプは同じ又は異なる、ことを特徴とする請求項17に記載のプロセッサ。
【請求項19】
前記オペコードは第2のオペコードであり、且つ前記インデックス値の数と前記ソース要素の数は同じであり、
前記実行ユニットは、前記ソースレジスタにおいて、N2ビットごとのM
N2個の要素から、各インデックス値によって指示されるソース要素をそれぞれ取得し、前記要素のデータタイプはダブルワードであり、N2ビットごとのM
N2個の要素から選択されたソース要素の数はn2個であり、N2、M
N2、及びn2はいずれも0よりも大きい正の整数である、ことを特徴とする請求項16に記載のプロセッサ。
【請求項20】
前記実行ユニットは、中間ベクトルを作成し、前記中間ベクトルは、少なくとも1つの中間ベクトルパラメータを含み、要素グループが存在している場合に、前記中間ベクトルパラメータの数は前記要素グループの数と等しいが、要素グループが存在していない場合に、前記中間ベクトルパラメータの数は前記ソース要素の数と等しく、選択された各前記ソース要素を前記中間ベクトルの対応する中間ベクトルパラメータにそれぞれ記憶し、前記中間ベクトルパラメータは選択されたソース要素と一対一に対応する関係があり、前記シャッフルパラメータに従い、各前記中間ベクトルパラメータのコンテンツを前記デスティネーションレジスタの対応する位置に書き込む、ことを特徴とする請求項17~19のいずれか1項に記載のプロセッサ。
【請求項21】
前記オペコードは第3のオペコードであり、前記インデックス値は、第1のインデックス値、第2のインデックス値、第3のインデックス値、及び第4のインデックス値を含み、前記第1のインデックス値、第2のインデックス値、第3のインデックス値、及び第4のインデックス値はそれぞれ、異なる位置をインデックスし、前記ソースレジスタは第1のソースレジスタと第2のソースレジスタを含み、
前記実行ユニットは、前記ソースレジスタにおいて、N3ビットごとのM
N3個の要素から、第1のインデックス値と第2のインデックス値によって指示されるソース要素をそれぞれ取得し、前記第2のソースレジスタにおいて、N3ビットごとのM
N3個の要素から、第3のインデックス値と第4のインデックス値によって指示されるソース要素をそれぞれ取得し、前記要素のデータタイプはワードであり、N3ビットごとのM
N3個の要素から選択されたソース要素の数はn3個であり、N3、M
N3、及びn3はいずれも0よりも大きい正の整数であり、前記実行ユニットは、前記第1のインデックス値よって指示されるソース要素を第1のターゲット要素として決定して、第2のインデックス値よって指示されるソース要素を第2のターゲット要素として決定し、前記第3のインデックス値よって指示されるソース要素を第3のターゲット要素として決定して、第4のインデックス値よって指示されるソース要素を第4のターゲット要素として決定し、前記第1のターゲット要素と前記第2のターゲット要素を前記デスティネーションレジスタの第1の位置に書き込むとともに、前記第3のターゲット要素と前記第4のターゲット要素を前記デスティネーションレジスタの第2の位置に書き込む、ことを特徴とする請求項16に記載のプロセッサ。
【請求項22】
前記オペコードは第4のオペコードであり、
前記実行ユニットは、前記ソースレジスタにおいて、M
n4個の要素から、各インデックス値によって指示されるソース要素をそれぞれ取得し、前記要素のデータタイプはダブルワードであり、選択されたソース要素の数はn4個であり、前記M
n4とn4はいずれも0よりも大きい正の整数である、ことを特徴とする請求項16に記載のプロセッサ。
【請求項23】
前記オペコードは第5のオペコードであり、前記インデックス値は第1のインデックス値と第3のインデックス値を含み、前記第1のインデックス値と第3のインデックス値はそれぞれ、異なる位置をインデックスし、前記ソースレジスタは第1のソースレジスタと第2のソースレジスタを含み、
前記実行ユニットは、前記第1のソースレジスタにおいて、M
n5個の要素から、第1のインデックス値によって指示される第1のソース要素を取得し、前記第1のソースレジスタにおいて、M
n5個の要素から、第3のインデックス値によって指示される第2のソース要素を取得し、前記要素のデータタイプは4ワードであり、選択されたソース要素の数はn5個であり、n5は0よりも大きい正の整数であり、第1のソース要素と第2のソース要素をそれぞれターゲット要素として決定して、前記デスティネーションレジスタの対応する位置に書き込む、ことを特徴とする請求項16に記載のプロセッサ。
【請求項24】
前記ソースレジスタの数は1つ又は複数であり、前記デスティネーションレジスタの数は1つであり、
前記ソースレジスタの数が1つである場合に、前記ソースレジスタ識別子は前記デスティネーションレジスタ識別子と異なり、
前記ソースレジスタの数が複数である場合に、すべての前記ソースレジスタの各ソースレジスタ識別子はいずれも前記デスティネーションレジスタ識別子と異なるか、または、前記ソースレジスタの数が複数である場合に、すべての前記ソースレジスタには、前記デスティネーションレジスタ識別子と同じであるソースレジスタ識別子が1つ存在している、ことを特徴とする請求項13~23のいずれか1項に記載のプロセッサ。
【請求項25】
メモリ及び1つ以上のプログラムを含む電子機器であって、1つ以上のプログラムは、メモリに記憶されており、且つ1つ以上のプロセッサにより請求項1~12のいずれか1項又は複数項に記載のベクトルのシャッフル方法を実行するように構成されている、ことを特徴とする電子機器。
【発明の詳細な説明】
【技術分野】
【0001】
本願は、コンピュータ技術の分野に関し、特に、ベクトルのシャッフル方法、プロセッサ及び電子機器に関する。
【背景技術】
【0002】
マルチメディアアプリケーションの発展につれて、より多くのプロセッサのコンピューティングタスクは、デジタル画像処理の分野に由来するものであり、画像ベースのアプリケーションは、サーバ、デスクトップコンピュータ、パーソナルモバイルデバイスすなわち組み込み機器における無視できないワークロードとなっている。デジタル画像処理ソフトウェアの実情に合わせて命令セットアーキテクチャを更新し、アプリケーションで一般的に使用される操作の命令サポートをプロセッサに追加することは、プロセッサ発展の主な方向であり、特定のアプリケーションに対するプロセッサの性能を向上させる簡単で効果的な方法でもあるため、規則的なデータセットでの同じ操作をサポートする単一命令列複数データ(Single Instruction Multiple Data、SIMD)アーキテクチャを追加するプロセッサが増えている。
【0003】
現在、SIMDプロセッサにおいて、シャッフル命令が広く導入されており、異なるシャッフル命令は異なる需要を満たすことができるが、従来の技術的解決手段において、特定の機能のベクトルシャッフル操作を実現する時、一連の操作を実現するには複数の命令が必要とされ、操作方式が複雑であり、かつ特定の機能の実行効率を低下させている。
【発明の概要】
【発明が解決しようとする課題】
【0004】
本願は、従来の技術において、一連の操作を実現するには複数の命令が必要とされ、操作方式が複雑であり、特定の機能の実行効率を低下させるという問題を解決するために、ベクトルのシャッフル方法、プロセッサ及び電子機器を提供する。
【課題を解決するための手段】
【0005】
上記の問題を解決するために、本願は、ベクトルのシャッフル方法を開示し、前記方法は、
レジスタ識別子及びシャッフルパラメータを含む命令を受信するステップであって、ここで、前記レジスタ識別子は、ソースレジスタ識別子及びデスティネーションレジスタ識別子を含み、前記ソースレジスタ識別子は、ソースレジスタを示すためのものであり、前記ソースレジスタは、ベクトルシャッフル操作実行時に操作されるソース要素を記憶するレジスタであり、前記デスティネーションレジスタ識別子は、デスティネーションレジスタを示すためのものであり、前記デスティネーションレジスタは、前記ベクトルシャッフル操作実行後に得られるターゲット要素を記憶するレジスタであり、前記シャッフルパラメータは、前記ソース要素に対するベクトルシャッフル操作の実行時に準拠するパラメータを指示するためのものである、ステップと、
前記命令を実行し、前記シャッフルパラメータに従って前記ソースレジスタから取得されたソース要素に対してベクトルシャッフル操作を実行するとともに、前記ベクトルシャッフル操作後のターゲット要素を取得するステップと、
前記ターゲット要素を前記デスティネーションレジスタに書き込むステップと、を含む。
【0006】
上記の問題を解決するために、本願は、プロセッサを開示し、前記プロセッサは、
データ要素を記憶するためのソースレジスタ、及びターゲットレジスタを含む、複数のベクトルレジスタと、
ソースレジスタ識別子及びデスティネーションレジスタ識別子を含むレジスタ識別子、及びシャッフルパラメータを含むベクトルシャッフル命令を復号化するための復号化ユニットと、
前記ベクトルシャッフル命令に応答し、前記シャッフルパラメータに従って前記ソースレジスタから取得されたソース要素に対してベクトルシャッフル操作を実行するとともに、前記ベクトルシャッフル操作後のターゲット要素を取得して、前記ターゲット要素を前記デスティネーションレジスタに書き込む、実行ユニットと、を含む。
【0007】
上記の問題を解決するために、本願は、メモリ及び1つ以上のプログラムを含む電子機器を開示し、1つ以上のプログラムは、メモリに記憶されており、且つ1つ以上のプロセッサにより上記の1つ又は複数の前述したベクトルのシャッフル方法を実行するように構成されている。
【発明の効果】
【0008】
本願は、従来の技術に比べて、次の利点がある。
【0009】
本願の実施例により提供されるベクトルのシャッフル方法、プロセッサ及び電子機器は、レジスタ識別子及びシャッフルパラメータを命令に追加し、シャッフルパラメータを用いて、ソースレジスタから取得された要素に対してベクトルシャッフル操作を実行することができるため、特定の機能を実現するために複数の命令によってシャッフル操作を実行する必要がなく、特定の機能のベクトルシャッフル操作を1つの命令によって実現することができ、特定の機能の実行効率を向上させる。
【図面の簡単な説明】
【0010】
【
図1】本願の実施例1により提供される1つのベクトルのシャッフル方法のステップのフローチャートである。
【
図2】本願の実施例2により提供される1つのベクトルのシャッフル方法のステップのフローチャートである。
【
図3】本願の実施例3により提供される1つのベクトルのシャッフル方法のステップのフローチャートである。
【
図4】本願の実施例4により提供される1つのベクトルのシャッフル方法のステップのフローチャートである。
【
図5】本願の実施例5により提供される1つのベクトルのシャッフル方法のステップのフローチャートである。
【
図6】本願の実施例6により提供される1つのベクトルのシャッフル方法のステップのフローチャートである。
【
図7】本願の実施例により提供されるプロセッサの構造ブロック図である。
【
図8】本願の実施例により提供される電子機器の構造ブロック図である。
【発明を実施するための形態】
【0011】
本願の上記の目的、特徴及び利点をさらに明瞭し、理解しやすくするために、以下は図面と特定の実施形態を参照して本願についてさらに詳細に説明する。
【0012】
本明細書および特許請求の範囲、ならびに上記の図面における、「第1の」、「第2」、「第3」などの用語は、類似または同種のオブジェクトまたはエンティティを区別するために使用されており、特に明記されていない限り(Unless otherwise indicated)、特定の順序または優先順位を限定することを必ずしも意味しない。このように使用される用語は、例えば、本願の実施例の図示または説明に示されている順序以外の順序で実施され得るように、適宜交換可能であることが理解されるべきである。
【0013】
以下の実施例は、プロセッサを参照して説明されるが、他の実施例は、他のタイプの集積回路および論理装置に適用可能である。本願の上記の技術及び教示は、より高いパイプラインスループット及び改善された性能の恩恵を受ける他のタイプの回路又は半導体装置に容易に適用することができる。本願の実施例は、データ操作を実行する任意のプロセッサまたはマシンに適用可能である。しかし、本願は、256ビット、128ビット、64ビット、32ビット、または16ビットのデータ操作を実行するプロセッサまたはマシンに限定されず、複合データが操作される必要がある任意のプロセッサおよびマシンに適用可能である。
【0014】
以下の説明では、説明の目的で、本願の完全な理解を提供するために多くの特定の詳細が示される。しかしながら、当業者は、これらの特定の詳細が本願を実施するために必要ではないことを認識すべきである。他の場合においては、いくつかの周知の電気的構造および回路は、本願を不必要に混乱させることを避けるために詳細に示されていない。また、以下の説明では、説明のために複数の例が提供され種々の例を図面に示している。しかしながら、これらの例は、本願のいくつかの例を提供することだけを目的としており、本願のすべての可能な実施形態の網羅を提供するものではないので、限定的なものとして解釈されるべきではない。
【0015】
以下の例は、実行ユニットのコンテキストにおける命令処理および分配について説明するが、本願の他の実施例は、ソフトウェアの形態で実施されてもよい。1つの実施例において、本願の方法は、機械実行可能命令として表される。前記命令は、これらの命令でプログラミングされた汎用プロセッサまたは専用プロセッサに、本願のステップを実行させるために使用することができる。本願のステップは、前記ステップを実行するためのハードワイヤードロジックを含む専用ハードウェアコンポーネントによって、またはプログラミングされたコンピュータコンポーネントとカスタムハードウェアコンポーネントとの任意の組み合わせによって実行することができる。これらのソフトウェアは、システム内のメモリに記憶できる。
【0016】
実施例1
【0017】
図1を参照されたい。
図1は、本願の実施例により提供される1つのベクトルのシャッフル方法のステップのフローチャートを示している。
【0018】
本願の実施例により提供されるベクトルのシャッフル方法は、その実行主体がCPU(Central Processing Unit、中央処理装置)であってもよく、次のステップ101~ステップ103を含む。
【0019】
ステップ101では、レジスタ識別子及びシャッフルパラメータを含む命令を受信する。
【0020】
本願の実施例では、命令とは、ベクトルシャッフル操作を実行するための命令であり、且つ当該命令はCPUによる実行に供する命令である。
【0021】
ベクトルシャッフル操作実行時に、ベクトルシャッフル操作を実行するための命令をCPUにより受信することができ、当該命令には、レジスタ識別子及びシャッフルパラメータを含む。
【0022】
レジスタ識別子は、ソースレジスタ識別子及びデスティネーションレジスタ識別子を含むことができ、ソースレジスタ識別子は、ソースレジスタを示すためのものであり、当該ソースレジスタは、ベクトルシャッフル操作実行時に操作されるソース要素を記憶するレジスタであり、当該シャッフル操作実行時に操作されるソース要素は、ソースレジスタに記憶されているすべてのデータであってもよいし、ソースレジスタに記憶されているデータの一部であってもよい。デスティネーションレジスタ識別子は、デスティネーションレジスタを示すためのものであり、当該デスティネーションレジスタは、ベクトルシャッフル操作実行後に得られるターゲット要素を記憶するレジスタである。
【0023】
本例では、ソースレジスタの数は、1つであってもよいし、2つであってもよく、すなわち、ソース要素は、1つ又は2つのレジスタに由来するものであり、具体的には、ソースレジスタの数は、業務上の必要に応じて決定することができ、本願の実施例はこれを制限しない。
【0024】
シャッフルパラメータは、ソース要素に対するベクトルシャッフル操作の実行時に準拠するパラメータを指示するために使用することができ、本例では、シャッフルパラメータは、インデックス値やオペコードなどのパラメータを含むことができ、選択的には、インデックス値は即値の形式で示され、オペコードはバイナリ形式で示されるコードであるか、またはオペコードはバイナリコードに変換可能な識別子である。
【0025】
命令が受信された後、ステップ102を実行する。
【0026】
ステップ102では、前記命令を実行し、前記シャッフルパラメータに従って前記ソースレジスタから取得されたソース要素に対してベクトルシャッフル操作を実行するとともに、前記ベクトルシャッフル操作後のターゲット要素を取得する。
【0027】
ターゲット要素とは、ソースレジスタ内の要素に対してベクトルシャッフル操作を実行した後に得られる要素である。
【0028】
本願の実施例では、ベクトルシャッフル操作を実行するための命令をCPUが受信した後、CPUにより当該命令を実行し、シャッフルパラメータに従ってソースレジスタから取得されたソース要素に対してベクトルシャッフル操作を実行するとともに、ベクトルシャッフル操作実行後のターゲット要素を取得することができる。
【0029】
ステップ103では、前記ターゲット要素を前記デスティネーションレジスタに書き込む。
【0030】
本願の実施例では、ベクトルシャッフル操作後のターゲット要素が取得された後、ターゲット要素をデスティネーションレジスタに書き込むことができる。
【0031】
選択的には、シャッフルパラメータに従ってソース要素を取得し、ベクトルシャッフル操作を実行し、ターゲット要素を取得する方法は、ベクトルシャッフル操作に必要なソース要素のソースレジスタにおける位置情報及び前記ベクトルシャッフル操作に必要なソース要素の数に従い、ソースレジスタからソース要素を選択し、選択されたすべてのソース要素をターゲット要素とするステップを含み、具体的には、下記の特定の実現形態を参照して詳細に説明することができる。
【0032】
本願の1つの特定の実現形態では、上記のステップ102は、次のサブステップA1~サブステップA3を含むことができる。
【0033】
サブステップA1では、前記シャッフルパラメータに従い、ソース要素の前記ソースレジスタにおける位置情報及び前記ベクトルシャッフル操作に必要なソース要素の数を決定し、選択された前記ソース要素の数は1つ又は複数である。
【0034】
本願の実施例では、シャッフルパラメータには、ソース要素のソースレジスタにおける位置情報及びソース要素の数を指示するためのパラメータが含まれている。
【0035】
CPUは、ベクトルシャッフル操作を実行するための命令を受信した後、当該命令を解析し、命令に含まれているシャッフルパラメータを解析して得ることができる。
【0036】
命令に含まれているシャッフルパラメータを解析して得た後、シャッフルパラメータに従ってベクトルシャッフル操作に必要なソース要素のソースレジスタにおける位置情報及び前記ベクトルシャッフル操作に必要なソース要素の数を決定することができ、選択されたソース要素の数は、1つあってもよいし、複数あってもよく、この後の例では、複数ある場合を例にして説明する。
【0037】
シャッフルパラメータに従ってソース要素のソースレジスタにおける位置情報及びソース要素の数を決定した後、サブステップA2を実行する。
【0038】
サブステップA2では、決定された前記位置情報及びソース要素の数に従い、前記ソースレジスタからソース要素を選択する。
【0039】
シャッフルパラメータに従ってソース要素のソースレジスタにおける位置情報及びソース要素の数を決定するとき、ソースレジスタからソース要素を選択する。
【0040】
決定された位置情報及びソース要素の数に従ってソースレジスタからソース要素を選択した後、サブステップA3を実行する。
【0041】
サブステップA3では、すべての前記選択されたソース要素をターゲット要素として決定する。
【0042】
決定された位置情報及びソース要素の数に従ってソースレジスタからソース要素を選択した後、すべての選択されたソース要素をターゲット要素として、デスティネーションレジスタに書き込むことができる。
【0043】
本願の実施例では、シャッフルパラメータは、インデックス値及びオペコードを含むことができ、インデックス値及びオペコードを用いてソース要素を選択しており、具体的には、下記の特定の実現形態を参照して詳細に説明することができる。
【0044】
選択的には、前記インデックス値は、前記ベクトルシャッフル操作に必要な各ソース要素の前記ソースレジスタにおける位置情報を指示するためのものであり、前記オペコードは、前記ソースレジスタ及びデスティネーションレジスタに対する操作を示すためのものであり、上記のサブステップA2は、次のサブステップB1~サブステップB2を含むことができる。
【0045】
サブステップB1では、前記インデックス値及び前記オペコードに従い、ソース要素を取得する選択ルールを決定する。
【0046】
本願の実施例では、選択ルールとは、ソースレジスタからソース要素を読み取るための制限条件を指す。
【0047】
シャッフルパラメータが取得された後、シャッフルパラメータに含まれているインデックス値及びオペコードに従ってソースレジスタからソース要素を取得する選択ルールを決定することができる。具体的には、次の2種類の場面に分けられる。
【0048】
第1の種の場面では、インデックス値の数とソース要素の数が異なる場合に、インデックス値の数に従ってソース要素のグループ化方式を決定し、当該グループ化方式及びオペコードに従いソース要素を取得する選択ルールを決定することができ、すなわち、まず、ソースレジスタ内のソース要素をグループ化し、例えばN個の隣接するソース要素を1つのグループとして、そして、インデックス値に従い、グループ化された要素からソース要素の選択ルールを取得するようにしているが、通常、Nは4であり、当然ながら、Nは、ソースレジスタのビット数などの具体的な応用シーンに応じて決定することができ、ここで繰り返して説明しない。
【0049】
第2種の場面では、インデックス値の数とソース要素の数が同じである場合に、オペコードに従ってソース要素を取得する選択ルールを決定することができる。
【0050】
インデックス値及びオペコードに従ってソース要素を取得する選択ルールを決定した後、サブステップB2を実行する。
【0051】
サブステップB2では、ソースレジスタから、前記選択ルールに遵い、各インデックス値によって指示されるソース要素をそれぞれ取得する。
【0052】
インデックス値及びオペコードに従ってソース要素を取得する選択ルールを決定した後、選択ルールに遵い、ソースレジスタから、各インデックス値によって指示されるソース要素をそれぞれ取得することができる。
【0053】
実際に応用する際、CPUは、ベクトルシャッフル命令のオペコードを用いて、インデックス値の数とソース要素の数が同じであるか否かを決定し、すなわち、CPUは、オペコードに従ってソース要素のグループ化状況及び選択ルールを決定することができる。
【0054】
選択的には、インデックス値とデスティネーションレジスタ内のアドレスとの間には所定の対応関係がある。選択的には、ターゲット要素を前記デスティネーションレジスタの前記即値に対応する位置に書き込むことは、すなわち、デスティネーションレジスタからインデックス値に対応する位置を決定し、ソース要素を決定された位置に順次記憶することである。具体的には、いずれのソース要素も、決定されたインデックス値によって取得されたものであり、当該ソース要素は、当該決定されたインデックス値と対応関係にあるデスティネーションレジスタ内のアドレスに書き込まれており、例示的に、ソース要素Aは、インデックス値ui8[1:0](ui8は即値を表し、当該即値ui8は1つのグループのデータを表すインデックス値であり、ui8[1:0]は当該即値の最下位2ビットからなる数を表す)によって取得されるが、インデックス値ui8[1:0]は、デスティネーションレジスタの1つのグループのアドレス内の最下位アドレスに対応し、このとき、取得されたソース要素Aは、1つのターゲット要素としてデスティネーションレジスタの最下位アドレスに書き込まれる。一例として、即値ui8は、8ビットを含む1つのグループのデータであり、即値ui8を使用して4つのインデックス値を構成し、ui8の2ビットごとに構成される数を1つのインデックス値とする。一方、これらのインデックス値のui8における位置やシーケンス番号は、インデックス値から取得されたソース要素がデスティネーションレジスタに移動されるべき要素位置を指示又は暗示している。例えば、インデックス値ui8[7:6]がui8の4番目のインデックス値である場合に、それに対応するソースオペランドはデスティネーションレジスタの4番目の要素位置に書き込まれる。同様に、ui8[n:n-1]がui8における(n+1)/2番目のインデックス値である場合に、それに対応するソースオペランドはデスティネーションレジスタのn番目の要素位置に書き込まれる。即値には、他の数のインデックス値を含むことができ、これに応じて、即値におけるi番目のインデックス値に対応するソースオペランドはデスティネーションレジスタのi番目の要素位置に書き込まれ、iは正の整数である。
【0055】
従来の技術において、SHUF命令(シャッフル命令の1種)を実現する際、シャッフルモードに応じて当該1つのシャッフル命令を設定して、異なる機能のシャッフル効果を得ることができ、当該シャッフルモードは、応用時の必要に応じて決定され、通常、他の少なくとも1つの命令によってシャッフルモードを呼び出して、当該シャッフルモードを上記のシャッフル命令に伝送してもよいし、または、シャッフルモードをメモリに追加してもよく、上記のシャッフル命令の実行中に、当該シャッフルモードをメモリにアクセスすることによって取得している。このことからわかるように、従来の技術においては、異なるシャッフルモードにおけるシャッフル命令を実現するために、複数の命令を必要とするか、または、メモリにアクセスする必要があり、複数の命令を用意するか、または、メモリにアクセスするかのどちらも、シャッフル命令実装時にCPUシステム全体のオーバーヘッドを大幅に増加する。従来の技術における技術的問題に鑑みて、本願の実施例では、シャッフルパラメータ(オペコード及びインデックス値)を命令に追加することによって、異なるシャッフルパラメータを用いて異なるシャッフルモードにおけるシャッフル命令を実装することができ、複数の命令によってデータシャッフルを実現する必要がなく、メモリにアクセスすることによってシャッフルモードを取得する必要もなくなるため、データシャッフル操作をシャッフル命令1つで実現することができ、システムオーバーヘッドを効果的に低下させる。
【0056】
インデックス値は即値によって実装することができるため、オペコードは、バイナリ形式で示されるコードで実装されてもよいし、またはオペコードはバイナリコードに変換可能な識別子として実装されてもよいため、実施例1における、オペコード及びインデックス値を含むベクトルシャッフル命令の実装方法を参照して、異なるオペコードを含むベクトルシャッフル命令の具体的な処理方式について、次の特定の実施例2~実施例6を用いて詳細に説明する。
【0057】
実施例2
【0058】
本願の1つの特定の実現形態では、前記オペコードは、第1のオペコードであり、且つ前記インデックス値の数と前記ソース要素の数は異なる。
図2に示すように、ベクトルシャッフル命令の処理方式は、次のステップ201~ステップ205を含むことができる。
【0059】
ステップ201では、レジスタ識別子及びシャッフルパラメータを含む命令を受信する。
【0060】
本願の実施例では、命令の意味及び命令に含まれているパラメータは、実施例1に記載されているものであり、ここで繰り返して説明しない。
【0061】
選択的には、ソースレジスタの数は1つであり、すなわちソース要素は1つのレジスタに由来するものである。
【0062】
選択的には、シャッフルパラメータは、インデックス値及びオペコードを含み、インデックス値は即値の形式で実装され、オペコードは、バイナリコードに転化可能な識別子の形式で実装され、且つオペコードは第1のオペコードである。
【0063】
選択的には、命令のフォーマットは、「オペコード デスティネーションレジスタ,ソースレジスタ,即値」である。当該命令のフォーマットに従い、具体的に実装する際、命令は、「[X]VS.{B/H/W} vd,vj,ui8」と示すことができ、[X]VSは第1のオペコードの命令名称であり、[X]は異なるビット数のレジスタを区別するためのオプションで、{B/H/W}は第1のオペコードのデータタイプで、Bはデータタイプがバイトであることを示し、Hはデータタイプがハーフワードであることを示し、Wはデータタイプがワードであることを示し、[X]VS.{B/H/W}は識別子形式の第1のオペコードであり、vdはデスティネーションレジスタを示し、vjはソースレジスタを示し、ui8は即値を示す。例示的に、VS.{B/H/W}は、[X]VS.Bを01110011100100バイナリ形式に変換する第1のオペコードのようなバイナリ形式に転化可能な第1のオペコードである。また、即値は、1つのグループのデータであってもよく、レジスタの異なる位置のインデックス値は、即値ui8の異なるビットであるui8[1:0]、ui8[3:2]、ui8[5:4]、ui8[7:6]で示され得る。
【0064】
ステップ202では、前記命令を実行して、前記オペコード及び前記インデックス値に従い、前記ソースレジスタ内の隣接する要素をN1個ごとに1つのグループの要素グループとして構成し、前記要素のデータタイプは、バイト、ハーフワード、ワードのいずれか1つであり、N1は0よりも大きい正の整数である。
【0065】
本願の実施例では、インデックス値の数とソース要素の数が異なる場合に、ソースレジスタ内の隣接する要素をN1個ごとに1つのグループの要素グループとして構成することができ、当該隣接する要素のデータタイプは、バイト、ハーフワード、ワードのいずれか1つであってもよく、例えば、ソースレジスタ内の隣接するワード要素を4個ごとに1つのグループの要素グループとして構成することができる。インデックス値の数とソース要素の数が異なる場合に、ソースレジスタ内の隣接する要素をN1個ごとに1つのグループの要素グループとして構成し、当該隣接する要素のデータタイプは、バイト、ハーフワード、ワードのいずれか1つであってもよく、要素グループからソース要素を選択し、N1は0よりも大きい正の整数であるなどの複数の条件を選択ルールとして決定する。例えば、N1はインデックス値の数であるようにすることによって、インデックス値の数がソース要素の数よりも少ない場合においても、N1とソース要素との数の差に応じて、ソース要素をグループ化し、インデックス値の数が各グループ内のソース要素の数に等しく、かつ各インデックス値がグループ内のソース要素と一対一に対応するようにする。
【0066】
隣接する要素はソースレジスタにおいて位置が順次隣接する要素であり、隣接する複数の要素グループにおける要素アドレスは、部分的に同じまたは完全に異なることがあり、当該要素アドレスは要素のレジスタにおける位置情報となる。隣接する複数の要素グループの間には同じ位置情報の要素がある場合に、2つの隣接する要素グループごとの同じ位置情報の要素の数の最大値はN1-1である。さらに、隣接する要素はソースレジスタにおける交差して隣接する要素である。例示的に、オペコードが第1のオペコードである場合に、データタイプは、バイト、ハーフワード、またはワードであり、ソースレジスタには、要素A1、要素A2、要素A3、要素A4、要素A5、要素A6、要素A7、要素A8という8つの要素がそれぞれ含まれていると想定して、上記の要素の位置情報は示された順序に遵って順次隣接し、N1=4であり、N1個の要素は、順次隣接する要素であってもよいし、交差して隣接する要素であってもよく、例えば、N1が4である場合に、ソースレジスタには、要素A1、要素A2、要素A3、要素A4、要素A5、要素A6、要素A7、要素A8という8つの要素がそれぞれ含まれていると想定すると、N1個の要素は、要素A2~A5であってもよいし、要素A1、要素A3、要素A5、要素A7のような交差して隣接する要素であってもよい。
【0067】
上記の実施例に基づき、前記ソースレジスタ内の隣接する要素をN1個ごとに1つのグループの要素グループとして構成することは、2つの場面を含む。
【0068】
第1種の場面では、要素A1~A4を一方のグループの要素グループとして構成し、要素A5~A8を他方のグループの要素グループとして構成し、2つの要素グループの間には同じ位置情報の要素がない一方、
第2種の場面では、要素A1~A4を一方のグループの要素グループとして構成し、要素A2~A5を他方のグループの要素グループとして構成し、2つの要素グループの間には同じ位置情報の要素が3つある(すなわち要素A2、要素A3、要素A4)。その他、2つの隣接する要素グループごとの同じ位置情報の要素の数の最大値がN1-1であることが満たされれば、要素A3~A6を他方のグループの要素グループとして選択するか、または要素A4~A7を他方のグループの要素グループとして選択してもよく、ここで繰り返して説明しない。
【0069】
選択的には、分割された複数の要素グループには、各要素グループ内に含まれている要素のデータタイプは同じであり、異なる要素グループ内に含まれている要素のデータタイプは同じである。例えば、分割された要素グループは、要素グループ1、要素グループ2、及び要素グループ3を含み、要素グループ1、要素グループ2、及び要素グループ3に含まれている要素のデータタイプは、いずれもバイトであるか、または、要素グループ1、要素グループ2、及び要素グループ3に含まれている要素のデータタイプは、いずれもハーフワードであるか、または、要素グループ1、要素グループ2、及び要素グループ3に含まれている要素のデータタイプはいずれもワードである。
【0070】
さらに、異なる要素グループは同じインデックス値が使用されているか、または、異なる要素グループは完全に同じではないインデックス値が使用されており、例示的に、異なる要素グループは同じインデックス値が使用されている場合に、要素グループ1から要素グループ4はいずれも、同じインデックス値ui8が使用されているが、異なる要素グループは完全に同じではないインデックス値が使用されている場合に、要素グループ1と要素グループ2はソース要素選択のためにui8aをインデックス値として使用しており、要素グループ3と要素グループ4はソース要素選択のためにui8bをインデックス値として使用しており、ui8aとui8bはui8の異なる位置を示し、且つ異なる値のインデックス値を示している。
【0071】
別の例では、複数の要素グループには、要素グループ内の各要素のデータタイプは同じであるが、異なる要素グループ(例えば、要素グループ1の要素と要素グループ2)内の要素はデータタイプが異なる。さらに、各要素グループの要素数は同じ又は異なる。例えば、要素グループ1は4つの要素があり、要素グループ2は2つの要素があると、同じ即値ui8は、要素グループ1に4つのインデックス値を提供し、要素グループ2に2つのインデックス値を提供する。
【0072】
上述の例は、本願の実施例に係る技術的解決手段をよりよく理解するための単なる例であり、本願の実施例を一意に限定するものではないことを理解されたい。
【0073】
ソースレジスタ内の隣接する要素をN1個ごとに1つのグループの要素グループとして構成した後、ステップ203を実行する。
【0074】
ステップ203では、各要素グループにおける要素を初期ソース要素として決定する。
【0075】
本願の実施例では、ソースレジスタ内の隣接する要素をN1個ごとに1つのグループの要素グループとして構成した後、各要素グループにおける要素を初期ソース要素として決定することができる。初期ソース要素とは、ソース要素を選択するための初期要素を指す。
【0076】
各要素グループの要素を初期ソース要素として決定した後、ステップ204を実行する。
【0077】
ステップ204では、前記初期ソース要素から、各インデックス値によって指示されるソース要素をそれぞれ取得し、各前記要素グループから選択されたソース要素の数はn1個である。
【0078】
本願の実施例では、初期ソース要素が決定された後、初期ソース要素から、各即値によって指示されるソース要素をそれぞれ取得し、すなわち即値に従って要素グループから対応するソース要素を選択することができる。各要素グループから選択されたソース要素の数はn1個あり、n1は0よりも大きい正の整数である。
【0079】
選択的には、即値と各グループの要素グループにおける要素位置との間には所定の対応関係があり、当該要素位置は、要素アドレスであってもよいし、要素の要素グループにおけるシーケンスビットであってもよく、シーケンスビットは、要素の要素グループにおける位置番号を表すものである。
【0080】
選択的には、前記初期ソース要素から、各即値によって指示されるソース要素をそれぞれ取得することは、すなわち、各要素グループから、即値に対応する要素位置における要素をそれぞれ取得し、取得された要素をソース要素として決定することである。異なる要素グループから選択されたソース要素の数は同じである。
【0081】
具体的に実装する際、オペコードが第1のオペコードであり、N1=4とし、データタイプがバイト、ハーフワード、またはワードである場合に、各要素グループに含まれている初期ソース要素の個数は同じで、いずれも4つあり、各要素グループから即値に対応するソース要素を選択し、n1は4であり、N1=n1である。例えば、即値が要素アドレス3を示す場合、アドレスが3の要素を各要素グループから選択し、選択されたすべての要素をソース要素として決定し、また、例えば、即値はシーケンスビットが3であることを示す場合に、最初の要素から順番数えて3番目の要素を各要素グループから選択し、選択されたすべての要素をソース要素として決定する。
【0082】
選択的には、N1はn1に等しい又は等しくないが、N1=n1である場合に、ステップ204を実行せずに、ステップ203の各要素グループにおける要素を直接に選択された要素としてもよい。
【0083】
さらに、各要素グループから選択されたソース要素の数は4つあり、ソース要素のデータタイプは、バイト、ハーフワード、またはワードであるが、通常、選択された各ソース要素のデータタイプは同じである。
【0084】
ステップ205では、選択されたソース要素をターゲット要素として決定して、ターゲット要素を前記デスティネーションレジスタの前記インデックス値に対応する位置に書き込む。
【0085】
本願の実施例では、即値とデスティネーションレジスタ内のアドレスとの間には所定の対応関係がある。選択的には、ターゲット要素を前記デスティネーションレジスタの前記即値に対応する位置に書き込むことは、すなわち、デスティネーションレジスタから、即値に対応する位置を決定し、ソース要素を決定された位置に順次記憶することである。
【0086】
さらに、1つの実行可能な解決手段では、ステップ201とステップ202との間に、中間ベクトルを作成するステップを追加し、具体的には、決定された前記位置情報及びソース要素の数に従い、前記ソースレジスタからソース要素を選択する前、中間ベクトルを作成することができ、前記中間ベクトルは少なくとも1つの中間ベクトルパラメータを含み、前記中間ベクトルパラメータの数は前記ターゲット要素の数と等しい。作成された中間ベクトルに基づき、ステップ204の後、すなわち前記ソースレジスタからソース要素を選択した後、前記選択された各ソース要素を前記中間ベクトルの対応する中間ベクトルパラメータにそれぞれ記憶し、前記中間ベクトルパラメータは、選択されたソース要素と一対一に対応する関係があり、ステップ205は、すなわち、前記即値に応じて、各前記中間ベクトルパラメータのコンテンツを前記デスティネーションレジスタの対応する位置に書き込むステップである。
【0087】
選択的には、前記中間ベクトルはソースレジスタに応じて作成されてもよく、ソースレジスタのタイプなどに応じて中間ベクトルを作成してもよい。
【0088】
選択的には、前記中間ベクトルにおける中間ベクトルパラメータの数とターゲット要素数は同じであり、且つインデックス値に応じて、デスティネーションレジスタにおける各ターゲット要素の位置と中間ベクトルにおける各中間ベクトルパラメータとは所定の対応関係があり、ソース要素がグループ化された場合、前記即値に応じて、各前記中間ベクトルパラメータのコンテンツを前記デスティネーションレジスタの対応する位置に書き込むことは、すなわち、パラメータiを設定し、iは、定数を表し、iの値の範囲は0~n-1であり、nは、レジスタビット数とデータタイプに応じて決定されるものであり、N1とiに応じて、中間ベクトルの各中間ベクトルパラメータによってインデックスされるソースレジスタにおけるソース要素を決定し、iに対して、0からn-1までの値を巡回して取ると同時に、中間ベクトルにおける異なるインデックス値に対応するソース要素をターゲットレジスタにおける当該インデックスに対応するターゲット要素位置に書き込む。具体的には、[N1i]、[N1i+1]、[N1i+2]……[N1i+N1-1]はそれぞれ異なる位置を示し、中間ベクトルは、「中間ベクトル={VR[ソースレジスタ].データタイプ[N1i+N1-1]、……VR[ソースレジスタ].データタイプ[N1i]}」と示すことができ、iは定数を表し、iの値の範囲は0~nであり、nはレジスタビット数とデータタイプに応じて决定され、例えば、レジスタビット数が128ビットで、データタイプがバイトである場合に、iは4であり、レジスタビット数が128ビットで、データタイプがハーフワードである場合に、iは2であり、レジスタビット数が128ビットで、データタイプがワードである場合に、iは1である。
【0089】
上記の中間ベクトルの解決手段に基づき、例示的に、第1のオペコードがVS.Bで、vjがソースレジスタである場合には、vec0={VR[vj].B[4i+3],VR[vj].B[4i+2], VR[vj].B[4i+1],VR[vj].B[4i]}という中間ベクトルを作成し、VR[vj].B[4i+3]、VR[vj].B[4i+2]、VR[vj].B[4i+1]、VR[vj].B[4i]はいずれも、中間ベクトルパラメータであり、iは定数を表し、[4i+0]、[4i+1]、[4i+2]、[4i+3]はレジスタの4つの連続する位置を表し、iの値の範囲は0~3である。各前記中間ベクトルパラメータのコンテンツを前記デスティネーションレジスタvdの対応する位置に書き込むことは、次のように示すことができる。
VR[vd].B[4i+0] = vec0.B[ui8[1:0]]
VR[vd].B[4i+1] = vec0.B[ui8[3:2]]
VR[vd].B[4i+2] = vec0.B[ui8[5:4]]
VR[vd].B[4i+3] = vec0.B[ui8[7:6]]
【0090】
ui8[1:0]、ui8[3:2]、ui8[5:4]、ui8[7:6]はいずれも、即値であり、中間ベクトルに対応するインデックス値を表し、具体的には、即値ui8の最下位2ビット(ui8[1:0])は1番目のターゲット要素の中間ベクトルにおけるインデックスを表し、即値ui8の第3ビットと第4ビット(ui8[3:2])は2番目のターゲット要素の中間ベクトルにおけるインデックスを表し、即値ui8の第5ビットと第6ビット(ui8[5:4])は3番目のターゲット要素の中間ベクトルにおけるインデックスを表し、即値ui8の第7ビットと第8ビット(ui8[7:6])は4番目のターゲット要素の中間ベクトルにおけるインデックスを表す。
【0091】
同様に、データタイプがハーフワードとワードである場合に、中間ベクトルとインデックスの方式は、上記の例と同じであり、オペコードの命令名称がXVS.{B/H/W}である場合に、2つの中間ベクトルに対してベクトルシャッフル操作を実装する必要がある。例示的に、第1のオペコードがXVS.Bである場合に、中間ベクトルは、次のように示されている。
vec0={VR[vj].B[4i+3],VR[vj].B[4i+2],VR[vj].B[4i+1],VR[vj].B[4i]}
vec1={VR[vj].B[4i+19],VR[vj].B[4i+18],VR[vj].B[4i+17],VR[vj].B[4i+16]}
【0092】
中間ベクトルはvec0とvec1であり、VR[vj].B[4i+3]、VR[vj].B[4i+2]、VR[vj].B[4i+1]、VR[vj].B[4i]は、中間ベクトルvec0の中間ベクトルパラメータで、VR[vj].B[4i+19]、VR[vj].B[4i+18]、VR[vj].B[4i+17]、VR[vj].B[4i+16]は、中間ベクトルvec1の中間ベクトルパラメータで、Bはデータタイプがバイトであることを示し、iは要素のレジスタにおける位置を示し、[4i+0]、[4i+1]、[4i+2]、[4i+3]は、レジスタの4つの連続する位置の要素を示し、[4i+16]、[4i+17]、[4i+18]、[4i+19]は、レジスタの4つの連続する位置の要素を示す。
【0093】
例示的に、第1のオペコードがXVS.Bであり、データタイプがバイトで、N1が4である場合に、ベクトルシャッフル命令「XVS.B vd,vj,ui8」は、ベクトルレジスタvjから、4つの隣接するバイト要素を読み取って1つのグループの要素を構成してシャッフルし、そして、得られた結果をベクトルレジスタvd内に書き込み、第1のオペコードがVS.Hであり、データタイプがハーフワードで、N1が4である場合に、ベクトルシャッフル命令「VS.H vd,vj,ui8」は、ベクトルレジスタvjから、4つの隣接するハーフワード要素を読み取り1つのグループの要素を構成してシャッフルし、そして、得られた結果をベクトルレジスタvd内に書き込み、第1のオペコードがVS.Wであり、データタイプがワードで、N1が4である場合に、ベクトルシャッフル命令「VS.W vd,vj,ui8」は、ベクトルレジスタvjから、4つの隣接するワード要素を読み取り1つのグループの要素を構成せいてシャッフルし、そして、得られた結果をベクトルレジスタvd内に書き込む。
【0094】
上述の例は、本願の実施例に係る技術的解決手段をよりよく理解するための単なる例であり、本願の実施例を一意に限定するものではないことを理解されたい。
【0095】
本願の実施例では、インデックス値及びオペコードを含むシャッフルパラメータをベクトルシャッフル命令に追加して、インデックス値及びオペコードに従い、ソースオペランドとインデックス値の数が異なる場合でのシャッフル操作を実装していることから、本願に係る技術的解決手段を採用すると、1つのベクトルシャッフル命令によって、ソースオペランドとインデックス値の数が異なる場合でのシャッフル操作を実装し、シャッフルモードを伝達するのに他の命令を追加する必要がなく、メモリにアクセスことによってシャッフルモードを取得する必要もなくなるため、システムオーバーヘッドを効果的に低下させ、ベクトルシャッフル操作の実行効率を向上させている。
【0096】
実施例3
【0097】
本願の1つの特定の実現形態では、前記オペコードは第2のオペコードで、且つ前記インデックス値の数と前記ソース要素の数が同じであり、
図3に示すように、ベクトルシャッフル命令の処理方式は、ステップ301~ステップ303を含む。
【0098】
ステップ301では、レジスタ識別子及びシャッフルパラメータを含む命令を受信する。
【0099】
本願の実施例では、命令の意味及び命令に含まれているパラメータは、実施例1と実施例2に記載されているものであり、ここで繰り返して説明しない。
【0100】
選択的には、ソースレジスタの数は2つあり、すなわち、ソース要素は2つの異なるレジスタに由来するものであり、前記ソースレジスタの数が複数である場合に、すべての前記ソースレジスタの各ソースレジスタ識別子はいずれも前記デスティネーションレジスタ識別子と異なるか、または、前記ソースレジスタの数が複数である場合に、すべての前記ソースレジスタには、前記デスティネーションレジスタ識別子と同じであるソースレジスタ識別子が1つ存在している。
【0101】
選択的には、シャッフルパラメータはインデックス値及びオペコードを含み、インデックス値は即値の形式で実装され、オペコードは、バイナリコードに転化可能な識別子の形式で実装され、且つオペコードは第2のオペコードである。例示的に、オペコードが第2のオペコードである場合に、ソースレジスタは第1のソースレジスタと第2のソースレジスタを含み、且つデスティネーションレジスタは第1のソースレジスタ又は第2のソースレジスタである。
【0102】
選択的には、命令のフォーマットは、「オペコード デスティネーションレジスタ,ソースレジスタ,即値」である。当該命令のフォーマットに従い、具体的に実装する際、命令は、「[X]VS.D vd,vj,ui8」と示すことができ、[X]VSは第2のオペコードの命令名称であり、Dは第2のオペコードのデータタイプで、Dはデータタイプがダブルワードであることを示し、[X]VS.Dは識別子形式の第2のオペコードであり、vdはデスティネーションレジスタを表し、vjとvdはソースレジスタを表し、ui8は即値を表す。例示的に、VS.Dは、VS.Dを01110011100111バイナリ形式に変換する第2のオペコードのようなバイナリ形式に転化可能な第2のオペコードである。また、即値は、1つのグループのデータであってもよく、インデックス値は、即値ui8の異なるビットであるui8[1:0]、ui8[3:2]、ui8[5:4]、ui8[7:6]で示され得る。
【0103】
ステップ302では、前記命令を実行して、前記オペコード及び前記インデックス値に従い、前記ソースレジスタにおいて、N2ビットごとのMN2個の要素から、各インデックス値によって指示されるソース要素をそれぞれ取得し、前記要素のデータタイプはダブルワードであり、N2ビットごとのMN2個の要素から選択されたソース要素の数はn2個であり、N2、MN2、及びn2はいずれも、0よりも大きい正の整数である。
【0104】
本願の実施例では、インデックス値の数とソース要素の数は同じであり、オペコードは第2のオペコードであり、N2ビットごとのMN2個の要素から、各インデックス値によって指示されるソース要素を取得し、要素のデータタイプはダブルワードであり、N2ビットごとのMN2個の要素から選択されたソース要素の数はn2個であり、N2、MN2、及びn2はいずれも0よりも大きい正の整数であるなどの条件を選択ルールとして決定する。
【0105】
選択的には、インデックス値はそれぞれ、各ソースレジスタ内の要素位置との間には所定の対応関係があり、当該要素位置は要素アドレスであってもよい。前記ソースレジスタにおいて、N2ビットごとのMN2個の要素から、各インデックス値によって指示されるソース要素をそれぞれ取得することは、すなわち、第1のソースレジスタにおいて、N2ビットごとのMN2個の要素から、各インデックス値によって指示される第1のソース要素をそれぞれ取得し、かつ、第2のソースレジスタにおいて、N2ビットごとのMN2個の要素から、各インデックス値によって指示される第2のソース要素をそれぞれ取得し、第1のソース要素と第2のソース要素を最終的に選択されたソース要素として決定することである。Mn2個の要素は、順次隣接する要素であってもよいし、交差して隣接する要素であってもよく、例えば、Mn2が4であり、ソースレジスタには、要素A1、要素A2、要素A3、要素A4、要素A5、要素A6、要素A7、要素A8という8つの要素がそれぞれ含まれていると想定すると、Mn4個の要素は、要素A2~A5であってもよいし、要素A1、要素A3、要素A5、要素A7のような交差して隣接する要素であってもよい。
【0106】
例示的に、第2のオペランドが[X]VS.Dである場合に、M2は128であり、MN2は4で、n2は2である。
【0107】
具体的に実装する際、ソースレジスタの数は2つあり、すなわち第1のソースレジスタと第2のソースレジスタとなり、前記ソースレジスタにおいて、N2ビットごとのMN2個の要素から、各インデックス値によって指示されるソース要素をそれぞれ取得することは、第1のソースレジスタにおいて、N2ビットごとのMN2’個の要素から、第1のインデックス値(ui8[1:0]など)によって指示されるソース要素を取得すること、及び、第1のソースレジスタにおいて、N2ビットごとのMN2’個の要素から、第2のインデックス値(ui8[3:2]など)によって指示されるソース要素を取得することを含み、MN2’はMN2の半分であり、第1のソースレジスタから選択されたソース要素の数はn2/2あり、第2のソースレジスタから選択されたソース要素の数はn2/2ある。ソースレジスタの数が複数である場合に、各ソースレジスタは、即値の異なるビットに応じてベクトルシャッフルを行い、すなわち、異なるソースレジスタに対応する即値のビットは異なり、即値のどのビットに応じてインデックスするかは、具体的な状況に合わせて決定され、ここで繰り返して説明しない。
【0108】
ステップ303では、選択されたソース要素をターゲット要素として決定して、ターゲット要素を前記デスティネーションレジスタの前記インデックス値に対応する位置に書き込む。
【0109】
本願の実施例では、即値とデスティネーションレジスタ内のアドレスとの間には所定の対応関係がある。選択的には、ターゲット要素を前記デスティネーションレジスタの前記即値に対応する位置に書き込むことは、すなわち、デスティネーションレジスタから、即値に対応する位置を決定して、ソース要素を決定された位置に順次記憶することである。
【0110】
さらに、1つの実行可能な解決手段では、ステップ301とステップ302との間に、中間ベクトルを作成するステップを追加し、具体的には、決定された前記位置情報及びソース要素の数に従い、前記ソースレジスタからソース要素を選択する前、中間ベクトルを作成することができ、前記中間ベクトルは、少なくとも1つの中間ベクトルパラメータを含み、要素グループが存在している場合に、前記中間ベクトルパラメータの数は前記要素グループの数と等しいが、要素グループが存在していない場合に、前記中間ベクトルパラメータの数は前記ソース要素の数と等しい。作成された中間ベクトルに基づき、ステップ302の後、すなわち、前記ソースレジスタからソース要素を選択した後、前記選択された各ソース要素を前記中間ベクトルの対応する中間ベクトルパラメータにそれぞれ記憶し、前記中間ベクトルパラメータは選択されたソース要素と一対一に対応する関係があり、ステップ303は、すなわち、前記即値に応じて、各前記中間ベクトルパラメータのコンテンツを前記デスティネーションレジスタの対応する位置に書き込む。中間ベクトルを作成する方法は実施例2に係る方法と同じであるため、ここで繰り返して説明しない。
【0111】
選択的には、前記即値に応じて、各前記中間ベクトルパラメータのコンテンツを前記デスティネーションレジスタの対応する位置に書き込むことは、すなわち、各前記中間ベクトルパラメータに対して、当該中間ベクトルパラメータのコンテンツを、当該中間ベクトルパラメータに対応するインデックス値によって指示されるデスティネーションレジスタの位置に書き込むという操作を実行する。
【0112】
上記の中間ベクトルの解決手段に基づき、例示的に、第2のオペコードがVS.Dであり、命令のフォーマットがVS.D vd,vj,ui8で、vjとvdはソースレジスタである場合、vec0={VR[vj], VR[vd]}という中間ベクトルを作成し、各前記中間ベクトルパラメータのコンテンツを前記デスティネーションレジスタvdの対応する位置に書き込むことは、次のように示すことができる。
VR[vd].D[0] = vec0.D[ui8[1:0]]
VR[vd].D[1] = vec0.D[ui8[3:2]]
【0113】
ui8[1:0]、ui8[3:2]はいずれも、即値であり、レジスタに対応するインデックス値を表し、具体的には、即値ui8の最下位2ビット(ui8[1:0])は1番目のターゲット要素のソースレジスタにおけるインデックスを表し、即値ui8の第3ビットと第4ビット(ui8[3:2])は2番目のターゲット要素のソースレジスタにおけるインデックスを表す。
【0114】
第2のオペコードがXVS.Dである場合に、2つの中間ベクトルに対してベクトルシャッフル操作を実装する必要がある。例示的に、中間ベクトルは、次のように示されている。
vec0 = {XR[xj][127:0], XR[xd][127:0]}
vec1 = {XR[xj][255:128], XR[xd][255:128]}
【0115】
中間ベクトルは、vec0とvec1であり、XR[xj][127:0], XR[xd][127:0]は、vec0の中間ベクトルパラメータを表し、XR[xj][255:128], XR[xd][255:128]は、vec1の中間ベクトルパラメータを表し、Dは、データタイプがダブルワードであり、64ビットの幅を表す。
【0116】
例示的に、第2のオペコードがVS.Dであり、データタイプがダブルワードで、N2が128で、MN2が4で、n2が2である場合に、ベクトルシャッフル命令「VS.D vd,vj,ui8」は、ベクトルレジスタvjとベクトルレジスタvdに対して、各128ビットにおける4つのダブルワード要素から、即値のコンテンツに従って2つのダブルワード要素をそれぞれ選択し、得られた結果をベクトルレジスタvdに対応する128ビット内に書き込むことを示すが、第2のオペコードがXVS.Dであり、データタイプがダブルワードで、N2が128で、MN2が4で、n2が2である場合に、ベクトルシャッフル命令「XVS.D vd,vj,ui8」は、ベクトルレジスタxjとベクトルレジスタxdの各128ビットにおける4つのダブルワード要素から、即値のコンテンツに従って2つのダブルワード要素を読み取り、そして、読み取ったダブルワード要素をxdに対応する128ビット内に書き込むことを示す。
【0117】
本願の実施例では、2つのソースレジスタには、デスティネーションレジスタと同じソースレジスタが1つ存在しており、すなわち、ソースレジスタであると同時に、デスティネーションレジスタでもあるレジスタが1つ存在しており、上記の技術的解決手段を採用すると、シャッフル命令が実行されたたびに、デスティネーションレジスタにおける要素の半分をカバーすることができ、対応する操作の実行が必要とされるソフトウェアアプリケーションのシーンに適用され得る。
【0118】
本願の実施例では、インデックス値及びオペコードを含むシャッフルパラメータをベクトルシャッフル命令に追加して、インデックス値及びオペコードに従い、ソースオペランドとインデックス値の数が同じであり、且つデータタイプがダブルワードで、レジスタが128ビットである場合でのシャッフル操作を実装していることから、本願に係る技術的解決手段を採用すると、1つのベクトルシャッフル命令によって、ソースオペランドとインデックス値の数が異なり、且つデータタイプがダブルワードである場合でのシャッフル操作を実装し、シャッフルモードを伝達するのに他の命令を追加する必要がなく、メモリにアクセスことによってシャッフルモードを取得する必要もなくなるため、システムオーバーヘッドを効果的に低下させ、ベクトルシャッフル操作の実行効率を向上させている。
【0119】
実施例4
【0120】
本願の1つの特定の実現形態では、前記オペコードは第3のオペコードであり、前記インデックス値は、第1のインデックス値、第2のインデックス値、第3のインデックス値、及び第4のインデックス値を含み、前記第1のインデックス値、第2のインデックス値、第3のインデックス値、及び第4のインデックス値はそれぞれ、同じ又は異なる位置をインデックスしており、
図4に示すように、ベクトルシャッフル命令の処理方式は、ステップ401~ステップ405を含むことができる。
【0121】
ステップ401では、レジスタ識別子及びシャッフルパラメータを含む命令を受信する。
【0122】
本願の実施例では、命令の意味及び命令に含まれているパラメータは、実施例1、実施例2、及び実施例3に記載されているものであり、ここで繰り返して説明しない。
【0123】
選択的には、ソースレジスタの数は2つあり、すなわちソース要素は2つの異なるレジスタに由来するものであり、前記ソースレジスタの数が複数である場合に、すべての前記ソースレジスタの各ソースレジスタ識別子はいずれも前記デスティネーションレジスタ識別子と異なるか、または、前記ソースレジスタの数が複数である場合に、すべての前記ソースレジスタには、前記デスティネーションレジスタ識別子と同じであるソースレジスタ識別子が1つ存在している。
【0124】
選択的には、シャッフルパラメータはインデックス値及びオペコードを含み、インデックス値は即値の形式で実装され、オペコードは、バイナリコードに転化可能な識別子の形式で実装され、且つオペコードは第3のオペコードである。例示的に、オペコードが第3のオペコードである場合に、ソースレジスタは第1のソースレジスタと第2のソースレジスタを含み、且つデスティネーションレジスタは第1のソースレジスタ又は第2のソースレジスタである。
【0125】
選択的には、命令のフォーマットは「オペコード デスティネーションレジスタ,ソースレジスタ,即値」である。当該命令のフォーマットに従い、具体的に実装する際、命令は、「[X]VP.W vd/xd,vj/xj,ui8」と示すことができ、[X]VPは、第3のオペコードの命令名称であり、Wは第3のオペコードのデータタイプで、Wはデータタイプがワードであることを示し、[X]VP.Wは識別子形式の第3のオペコードを表し、vd/xdはデスティネーションレジスタを表し、vjとvdはソースレジスタを表し(またはxjとxdはソースレジスタを表す)、ui8は即値を表す。例示的に、VP.Wは、VP.Wを01110011111001バイナリ形式に変換する第3のオペコードのようなバイナリ形式に転化可能な第3のオペコードである。また、即値は1つのグループのデータであってもよく、インデックス値は、即値ui8の異なるビットであるui8[1:0]、ui8[3:2]、ui8[5:4]、ui8[7:6]で示され得る。
【0126】
ステップ402では、前記命令を実行して、前記オペコード及び前記インデックス値に従い、前記第1のソースレジスタにおいて、N3ビットごとのMN3個の要素から、第1のインデックス値と第2のインデックス値によって指示されるソース要素をそれぞれ取得し、前記第2のソースレジスタにおいて、N3ビットごとのMN3個の要素から、第3のインデックス値と第4のインデックス値によって指示されるソース要素をそれぞれ取得する。
【0127】
前記要素のデータタイプはワードであり、N3ビットごとのMN3個の要素から選択されたソース要素の数はn3個であり、N3、MN3、及びn3はいずれも0よりも大きい正の整数である。
【0128】
本願の実施例では、インデックス値は、それぞれ、第1のインデックス値、第2のインデックス値、第3のインデックス値、及び第4のインデックス値という4つのインデックス値を含み、第1のインデックス値、第2のインデックス値、第3のインデックス値、及び第4のインデックス値はそれぞれ、異なる位置をインデックスする。ソースレジスタの数が複数である場合に、各ソースレジスタは即値の異なるビットに応じてベクトルシャッフルを行い、すなわち異なるソースレジスタに対応する即値のビットは異なり、即値のどのビットに応じてインデックスするかは、具体的な状況に合わせて決定され、ここで繰り返して説明しない。例示的に、第3のオペコードが[X]VP.Wである場合に、第1のインデックス値はui8[1:0]であり、第2のインデックス値はui8[3:2]で、第3のインデックス値はui8[5:4]で、第4のインデックス値はui8[7:6]である。
【0129】
また、インデックス値の数とソース要素の数が同じであり、N3ビットごとのMN3個の要素から、各インデックス値によって指示されるソース要素を取得し、前記要素のデータタイプはワードであり、N3ビットごとのMN3個の要素から選択されたソース要素の数はn3個であり、N3、MN3、及びn3はいずれも0よりも大きい正の整数であるなどの条件を選択ルールとして決定する。Mn3個の要素は、順次隣接する要素であってもよいし、交差して隣接する要素であってもよく、例えば、Mn3が4であり、ソースレジスタには、要素A1、要素A2、要素A3、要素A4、要素A5、要素A6、要素A7、要素A8という8つの要素がそれぞれ含まれていると想定すると、Mn4個の要素は、要素A2~A5であってもよいし、要素A1、要素A3、要素A5、要素A7のような交差して隣接する要素であってもよい。
【0130】
選択的には、インデックス値と各ソースレジスタ内の要素位置との間には所定の対応関係がそれぞれあり、当該要素位置は要素アドレスであってもよい。前記ソースレジスタにおいて、N3ビットごとのMN3個の要素から、各インデックス値によって指示されるソース要素をそれぞれ取得することは、すなわち、前記第1のソースレジスタにおいて、N3ビットごとのMN3個の要素から、第1のインデックス値と第2のインデックス値によって指示されるソース要素をそれぞれ取得すること、及び前記第2のソースレジスタにおいて、N3ビットごとのMN3個の要素から、第3のインデックス値と第4のインデックス値によって指示されるソース要素をそれぞれ取得することである。
【0131】
例示的に、第3のオペコードが[X]VP.Wである場合に、N3は128であり、MN3は4で、n3は2である。
【0132】
ソースレジスタにおいて、N3ビットごとのMN3個の要素から、各インデックス値によって指示されるソース要素をそれぞれ取得した後、ステップ403とステップ404を実行する。
【0133】
ステップ403では、前記第1のインデックス値よって指示されるソース要素を第1のターゲット要素として決定して、第2のインデックス値よって指示されるソース要素を第2のターゲット要素として決定する。
【0134】
本願の実施例では、第1のソースレジスタから選択された第1のインデックス値よって指示されるソース要素を第1のターゲット要素として決定して、第1のソースレジスタから選択された第2のインデックス値よって指示されるソース要素を第2のターゲット要素として決定する。
【0135】
ステップ404では、前記第3のインデックス値よって指示されるソース要素を第3のターゲット要素として決定して、第4のインデックス値よって指示されるソース要素を第4のターゲット要素として決定する。
【0136】
本願の実施例では、第2のソースレジスタから選択された第3のインデックス値よって指示されるソース要素を第3のターゲット要素として決定して、第2のソースレジスタから選択された第4のインデックス値よって指示されるソース要素を第4のターゲット要素として決定する。
【0137】
本願の実施例では、ステップ403とステップ404は、同時に実行されるステップであってもよいし、順番に実行されるステップであってもよく、実行順番は限定されない。ステップ403とステップ404をすべて実行完了した後、ステップ405を実行する。
【0138】
ステップ405では、前記第1のターゲット要素と前記第2のターゲット要素を前記デスティネーションレジスタの第1の位置に書き込むとともに、前記第3のターゲット要素と前記第4のターゲット要素を前記デスティネーションレジスタの第2の位置に書き込む。
【0139】
本願の実施例では、即値とデスティネーションレジスタ内のアドレスとの間には所定の対応関係がある。選択的には、ターゲット要素を前記デスティネーションレジスタの前記即値に対応する位置に書き込むことは、すなわち、デスティネーションレジスタから、即値に対応する位置を決定して、ソース要素を決定された位置に順次記憶することである。
【0140】
本願の実施例では、オペコードが第3のオペコードである場合に、第1のターゲット要素、第2のターゲット要素、第3のターゲット要素、及び第4のターゲット要素を取得した後、第1のターゲット要素と第2のターゲット要素をデスティネーションレジスタの第1の位置に書き込むとともに、第3のターゲット要素と第4のターゲット要素をデスティネーションレジスタの第2の位置に書き込むことができる。
【0141】
例示的に、第3のオペコードがVP.W/XVP.W(両者は[X]VP.Wとして簡略化される)であり、データタイプがワードで、N3が128で、MN3が4で、n3が2である場合に、ベクトルシャッフル命令「[X]VP.W vd,vj,ui8」は、ui8[1:0]とui8[3:2]の値をインデックス値として、ベクトルレジスタvj/xjの128ビットごとにおける4つのワード要素から、それぞれ2つの要素を選択して、ベクトルレジスタvd/xdに対応する128ビットの0番目と1番目のワード要素に書き込むこと、及びui8[5:4]とui8[7:6]の値をインデックス値として、ベクトルレジスタvd/xdの128ビットごとにおける4つのワード要素から、それぞれ2つの要素を選択して、ベクトルレジスタvd/xdに対応する128ビットの2番目と3番目のワード要素に書き込むことを示す。
【0142】
本願の実施例では、インデックス値及びオペコードを含むシャッフルパラメータをベクトルシャッフル命令に追加して、インデックス値及びオペコードに従って、ソースオペランドとインデックス値の数が同じであり、且つデータタイプがワードである場合でのシャッフル操作を実装していることから、本願に係る技術的解決手段を採用すると、1つのベクトルシャッフル命令によって、ソースオペランドとインデックス値の数が同じであり、且つデータタイプがワードである場合でのシャッフル操作を実装しており、シャッフルモードを伝達するのに他の命令を追加する必要がなく、メモリにアクセスことによってシャッフルモードを取得する必要もなくなるため、システムオーバーヘッドを効果的に低下させ、ベクトルシャッフル操作の実行効率を向上させている。
【0143】
実施例5
【0144】
本願の1つの特定の実現形態では、前記オペコードは第4のオペコードであり、且つ前記インデックス値の数と前記ソース要素の数が同じであり、
図5に示すように、ベクトルシャッフル命令の処理方式は、ステップ501~ステップ503を含むことができる。
【0145】
ステップ501では、レジスタ識別子及びシャッフルパラメータを含む命令を受信する。
【0146】
本願の実施例では、命令の意味及び命令に含まれているパラメータは、実施例1~実施例4に記載されているものであり、ここで繰り返して説明しない。
【0147】
選択的には、ソースレジスタの数は1つであり、すなわちソース要素は1つのレジスタに由来するものである。
【0148】
選択的には、シャッフルパラメータはインデックス値及びオペコードを含み、インデックス値は即値の形式で実装され、オペコードは、バイナリコードに転化可能な識別子の形式で実装され、且つオペコードは第4のオペコードである。
【0149】
選択的には、命令のフォーマットは「オペコード デスティネーションレジスタ,ソースレジスタ,即値」である。当該命令のフォーマットに従い、具体的に実装する際、命令は、XVP.D xd,xj,ui8と示すことができ、XVPは第4のオペコードの命令名称であり、Dは第4のオペコードのデータタイプで、Dはデータタイプがダブルワードであることを示し、XVP.Dは識別子形式の第4のオペコードであり、xdはデスティネーションレジスタを表し、xjはソースレジスタを表し、ui8は即値を表す。例示的に、XVP.Dは、XVP.Dを01110111111010バイナリ形式に変換する第4のオペコードのようなバイナリ形式に転化可能な第4のオペコードである。また、即値は1つのグループのデータであってもよく、インデックス値は、即値ui8の異なるビットであるui8[1:0]、ui8[3:2]、ui8[5:4]、ui8[7:6]で示され得る。
【0150】
ステップ502では、前記命令を実行して、前記オペコードと前記即値に従い、前記ソースレジスタにおいて、Mn4個の要素から、各インデックス値によって指示されるソース要素をそれぞれ取得し、前記要素のデータタイプはダブルワードであり、選択されたソース要素の数はn4個であり、前記Mn4とn4はいずれも0よりも大きい正の整数である。
【0151】
本願の実施例では、オペコードは第4のオペコードであり、第4のオペコードは、ソースレジスタからダブルワードのデータタイプの要素を取得することを指示するために使用され得る。インデックス値の数とソース要素の数が同じであり、Mn4個の要素から、各インデックス値によって指示されるソース要素を取得し、前記要素のデータタイプはダブルワードであり、選択されたソース要素の数はn4個であり、前記Mn4とn4はいずれも0よりも大きい正の整数であるなどの複数の条件を選択ルールとして決定する。Mn4個の要素は、順次隣接する要素であってもよいし、交差して隣接する要素であってもよく、例えば、Mn4が4であり、ソースレジスタには、要素A1、要素A2、要素A3、要素A4、要素A5、要素A6、要素A7、要素A8という8つの要素がそれぞれ含まれていると想定すると、Mn4個の要素は、要素A2~A5であってもよいし、要素A1、要素A3、要素A5、要素A7のような交差して隣接する要素であってもよい。
【0152】
選択的には、インデックス値と各ソースレジスタ内の要素位置との間には所定の対応関係がそれぞれあり、当該要素位置は要素アドレスであってもよい。当該第4のオペコードとインデックス値に従って選択ルールを決定した後、ソースレジスタにおいて、Mn4個の要素から、各インデックス値によって指示されるソース要素をそれぞれ取得することができ、取得されたソース要素のデータタイプはダブルワードであり、選択されたソース要素の数はn4個であり、Mn4とn4はいずれも0よりも大きい正の整数である。
【0153】
例示的に、第4のオペコードがXVP.Dである場合に、Mn4は4であり、n4は4である。
【0154】
ステップ503では、選択されたソース要素をターゲット要素として決定して、ターゲット要素を前記デスティネーションレジスタの前記インデックス値に対応する位置に書き込む。
【0155】
本願の実施例では、即値とデスティネーションレジスタ内のアドレスとの間には所定の対応関係がある。選択的には、ターゲット要素を前記デスティネーションレジスタの前記即値に対応する位置に書き込むことは、すなわち、デスティネーションレジスタから、即値に対応する位置を決定して、ソース要素を決定された位置に順次記憶することである。
【0156】
例示的に、第4のオペコードがXVP.Dであり、データタイプがダブルワードで、Mn4が4で、n4が4である場合に、ベクトルシャッフル命令「XVP.D xd,xj,ui8」は、ui8[1:0]、ui8[3:2]、ui8[5:4]、ui8[7:6]の値をインデックス値として、ベクトルレジスタxjの4つのダブルワード要素から、各インデックス値によって指示されるソース要素を選択して、ソース要素をベクトルレジスタxdの4つのダブルワード要素に順次書き込むことを示す。
【0157】
本願の実施例では、インデックス値及びオペコードを含むシャッフルパラメータをベクトルシャッフル命令に追加して、インデックス値及びオペコードに従い、ソースオペランドとインデックス値の数が同じであり、且つデータタイプがダブルワードで、レジスタが256ビットである場合でのシャッフル操作を実装していることから、本願に係る技術的解決手段を採用すると、1つのベクトルシャッフル命令によって、ソースオペランドとインデックス値の数が同じであり、且つデータタイプがダブルワードで、レジスタが256ビットである場合でのシャッフル操作を実装しており、シャッフルモードを伝達するのに他の命令を追加する必要がなく、メモリにアクセスことによってシャッフルモードを取得する必要もなくなるため、システムオーバーヘッドを効果的に低下させ、ベクトルシャッフル操作の実行効率を向上させている。
【0158】
実施例6
【0159】
本願の1つの特定の実現形態では、前記オペコードは第5のオペコードであり、前記インデックス値は第1のインデックス値と第3のインデックス値を含み、前記第1のインデックス値と第3のインデックス値はそれぞれ、異なる位置をインデックスし、前記ソースレジスタは第1のソースレジスタと第2のソースレジスタを含み、
図6に示すように、ベクトルシャッフル命令の処理方式は、ステップ601~ステップ603を含むことができる。
【0160】
ステップ601では、レジスタ識別子及びシャッフルパラメータを含む命令を受信する。
【0161】
本願の実施例では、命令の意味及び命令に含まれているパラメータは、実施例1~実施例5に記載されているものであり、ここで繰り返して説明しない。
【0162】
選択的には、ソースレジスタの数は2つあり、すなわちソース要素は2つの異なるレジスタに由来するものであり、前記ソースレジスタの数が複数である場合に、すべての前記ソースレジスタの各ソースレジスタ識別子はいずれも、前記デスティネーションレジスタ識別子と異なるか、または、前記ソースレジスタの数が複数である場合に、すべての前記ソースレジスタには、前記デスティネーションレジスタ識別子と同じであるソースレジスタ識別子が1つ存在している。
【0163】
選択的には、シャッフルパラメータはインデックス値及びオペコードを含み、インデックス値は即値の形式で実装され、オペコードは、バイナリコードに転化可能な識別子の形式で実装され、且つオペコードは第5のオペコードである。例示的に、オペコードが第5のオペコードである場合に、ソースレジスタは第1のソースレジスタと第2のソースレジスタを含み、且つデスティネーションレジスタは第1のソースレジスタ又は第2のソースレジスタである。
【0164】
選択的には、命令のフォーマットは、「オペコード デスティネーションレジスタ,ソースレジスタ,即値」である。当該命令のフォーマットに従い、具体的に実装する際、命令は、XVP.Q vd/xd,vj/xj,ui8と示すことができ、XVPは第5のオペコードの命令名称であり、Qは第5のオペコードのデータタイプで、Qはデータタイプが4ワードであることを示し、XVP.Qは識別子形式の第5のオペコードであり、xdはデスティネーションレジスタを表し、xjとxdはソースレジスタを表し、ui8は即値を表す。例示的に、XVP.Qは、XVP.Qを01110111111011バイナリ形式に変換する第5のオペコードのようなバイナリ形式に転化可能な第5のオペコードである。また、即値は1つのグループのデータであってもよく、インデックス値は、即値ui8の異なるビットであるui8[1:0]、ui8[5:4]で示され得る。
【0165】
ステップ602では、前記命令を実行して、前記オペコードと前記即値に従い、前記第1のソースレジスタにおいて、Mn5個の要素から、第1のインデックス値によって指示される第1のソース要素を取得し、前記第2のソースレジスタにおいて、Mn5個の要素から、第2のインデックス値によって指示される第2のソース要素を取得し、前記要素のデータタイプは4ワードであり、選択されたソース要素の数はn5個であり、n5は0よりも大きい正の整数である。
【0166】
本願の実施例では、オペコードは第5のオペコードであってもよく、当該第5のオペコードは、ソースレジスタから、データタイプが4ワードの要素を取得することを指示するために使用され得る。インデックス値は、第1のインデックス値と第3のインデックス値という2つのインデックス値を含み、第1のインデックス値と第3のインデックス値はそれぞれ、異なる位置をインデックスし、第1のインデックス値と第3のインデックス値はそれぞれ、同一の即値の異なるビットを表し、例えば、第1のインデックス値は即値ui8の下位ビットを表し、第3のインデックス値は即値ui8の上位ビットを表し、また、第1のインデックス値はさらに、即値ui8の最下位2ビットを表し、第3のインデックス値は、さらに即値ui8の次に最下位2ビットを表すことができる。例示的に、第5のオペコードがXVP.Qである場合に、第1のインデックス値はui8[1:0]であり、第3のインデックス値はui8[5:4]である。ソースレジスタの数が複数である場合に、各ソースレジスタは即値の異なるビットに応じてベクトルシャッフルを行い、すなわち異なるソースレジスタに対応する即値のビットは異なり、即値のどのビットに応じてインデックスするかは、具体的な状況に合わせて決定され、ここで繰り返して説明しない。
【0167】
また、インデックス値の数とソース要素の数が同じであり、前記第1のソースレジスタにおいて、Mn5個の要素から、第1のインデックス値によって指示される第1のソース要素を取得し、前記第2のソースレジスタにおいて、Mn5個の要素から、第2のインデックス値によって指示される第2のソース要素を取得し、前記要素のデータタイプは4ワードであり、選択されたソース要素の数はn5個であり、n5は0よりも大きい正の整数であるなどの複数の条件を選択ルールとして決定する。Mn5個の要素は、順次隣接する要素であってもよいし、交差して隣接する要素であってもよく、例えば、Mn5が4であり、ソースレジスタには、要素A1、要素A2、要素A3、要素A4、要素A5、要素A6、要素A7、要素A8という8つの要素がそれぞれ含まれていると想定すると、Mn5個の要素は、要素A2~A5であってもよいし、要素A1、要素A3、要素A5、要素A7のような交差して隣接する要素であってもよい。
【0168】
選択的には、インデックス値と各ソースレジスタ内の要素位置との間には所定の対応関係がそれぞれあり、当該要素位置は要素アドレスであってもよい。第5のオペコードとインデックス値に従って選択ルールを決定した後、第1のソースレジスタにおいて、Mn5個の要素から、第1のインデックス値によって指示される第1のソース要素を取得し、第2のソースレジスタにおいて、Mn5個の要素から、第2のインデックス値によって指示される第2のソース要素を取得することができる。第1のソースレジスタから選択されたソース要素の数はn3/2あり、第2のソースレジスタから選択されたソース要素の数はn3/2ある。ソースレジスタの数が複数である場合に、各ソースレジスタは即値の異なるビットに応じてベクトルシャッフルを行い、すなわち異なるソースレジスタに対応する即値のビットは異なり、即値のどのビットに応じてインデックスするかは、具体的な状況に合わせて決定され、ここで繰り返して説明しない。
【0169】
例示的に、第5のオペコードがXVP.Qである場合に、MN5は2であり、n3は2である。
【0170】
第1のソース要素と第2のソース要素を取得した後、ステップ603を実行する。
【0171】
ステップ603では、第1のソース要素と第2のソース要素をそれぞれターゲット要素として決定して、前記デスティネーションレジスタの対応する位置に書き込む。
【0172】
本願の実施例では、即値とデスティネーションレジスタ内のアドレスとの間には所定の対応関係がある。選択的には、ターゲット要素を前記デスティネーションレジスタの前記即値に対応する位置に書き込むことは、すなわち、デスティネーションレジスタから、即値に対応する位置を決定して、ソース要素を決定された位置に順次記憶することである。
【0173】
本願の実施例では、オペコードが第5のオペコードである場合に、第1のソース要素と第2のソース要素を取得した後、第1のソース要素をターゲット要素として決定してデスティネーションレジスタの第1の位置に書き込み、第2のソース要素をターゲット要素として決定してデスティネーションレジスタの第2の位置に書き込むことができる。第1の位置と第2の位置はそれぞれインデックス値によって決定される。
【0174】
例示的に、第5のオペコードがXVP.Qであり、データタイプが4ワードで、MN5が2で、n3が2である場合に、ベクトルシャッフル命令「XVP.Q xd,xj,ui8」は、ui8[1:0]、ui8[5:4]の値に従い、ベクトルレジスタxjの2つの4ワード要素から1つのソース要素を選択して、ベクトルレジスタxdの2つの4ワード要素から1つのソース要素を選択して、選択された2つのソース要素をインデックス値に従ってベクトルレジスタxdの2つの4ワード要素に書き込むことを示す。
【0175】
本願の実施例では、インデックス値及びオペコードを含むシャッフルパラメータをベクトルシャッフル命令に追加して、インデックス値及びオペコードに従い、ソースオペランドとインデックス値の数が同じであり、且つデータタイプが4ワードである場合でのシャッフル操作を実装していることから、本願に係る技術的解決手段を採用すると、1つのベクトルシャッフル命令によって、ソースオペランドとインデックス値の数が同じであり、且つデータタイプが4ワードである場合でのシャッフル操作を実装しており、シャッフルモードを伝達するのに他の命令を追加する必要がなく、メモリにアクセスことによってシャッフルモードを取得する必要もなくなるため、システムオーバーヘッドを効果的に低下させ、ベクトルシャッフル操作の実行効率を向上させている。
【0176】
実施例7
【0177】
図7を参照すると、
図7は、本願の実施例により提供されるプロセッサの構造概略図を示している。
【0178】
図7に示すように、当該プロセッサは、
データ要素を記憶するためのソースレジスタ72及びターゲットレジスタ74を含む複数のベクトルレジスタと、
ソースレジスタ識別子及びデスティネーションレジスタ識別子を含むレジスタ識別子、及びシャッフルパラメータを含むベクトルシャッフル命令を復号化するための復号化ユニット71と、
前記ベクトルシャッフル命令に応答し、前記シャッフルパラメータに従って前記ソースレジスタ71から取得されたソース要素に対してベクトルシャッフル操作を実行するとともに、前記ベクトルシャッフル操作後のターゲット要素を取得して、前記ターゲット要素を前記デスティネーションレジスタ74に書き込む実行ユニット73と、を含むことができる。
【0179】
選択的には、命令は命令メモリ70に記憶されている。
【0180】
選択的には、前記実行ユニット73は、前記シャッフルパラメータに従い、前記ソース要素の前記ソースレジスタ71における位置情報及びソース要素の数を決定し、選択された前記ソース要素の数は1つ又は複数であり、決定された前記位置情報及びソース要素の数に従い、前記ソースレジスタからソース要素を選択し、すべての前記選択されたソース要素をターゲット要素として決定する。
【0181】
選択的には、前記シャッフルパラメータはインデックス値及びオペコードを含み、前記インデックス値は、ベクトルシャッフル操作に必要な各ソース要素の前記ソースレジスタにおける位置情報を指示するためのものであり、前記オペコードは、前記ソースレジスタとデスティネーションレジスタに対する操作を示すためのものであり、
前記実行ユニット73は、前記インデックス値及び前記オペコードに従い、ソース要素を取得する選択ルールを決定し、ソースレジスタ71から、前記選択ルールに遵い、各インデックス値によって指示されるソース要素をそれぞれ取得する。
【0182】
選択的には、前記実行ユニット73は、前記インデックス値の数と前記ソース要素の数が異なる場合に、前記インデックス値の数に従い、前記ソース要素のグループ化方式を決定して、前記グループ化方式及び前記オペコードに従い、前記選択ルールを決定し、前記インデックス値の数と前記ソース要素の数が同じである場合に、前記オペコードに従い、前記選択ルールを決定する。
【0183】
選択的には、前記実行ユニット73は、前記ソースレジスタ内の隣接する要素をN1個ごとに1つのグループの要素グループとして構成し、前記要素のデータタイプは、バイト、ハーフワード、ワードのいずれか1つであり、N1は0よりも大きい正の整数であり、各要素グループにおける要素を初期ソース要素として決定し、前記初期ソース要素から、各インデックス値によって指示されるソース要素をそれぞれ取得し、各前記要素グループから選択されたソース要素の数はn1個である。
【0184】
選択的には、前記隣接する要素は、前記ソースレジスタにおいて位置が順次隣接する要素であり、隣接する複数の要素グループにおける要素アドレスは、部分的に同じまたは完全に異なることがあり、
各要素グループに含まれている要素のデータタイプは同じであり、異なる要素グループに含まれている要素のデータタイプは同じ又は異なる。
【0185】
選択的には、前記オペコードは第2のオペコードであり、且つ前記インデックス値の数と前記ソース要素の数は同じであり、
前記実行ユニット73は、前記ソースレジスタにおいて、N2ビットごとのMN2個の要素から、各インデックス値によって指示されるソース要素をそれぞれ取得し、前記要素のデータタイプはダブルワードであり、N2ビットごとのMN2個の要素から選択されたソース要素の数はn2個であり、N2、MN2、及びn2はいずれも0よりも大きい正の整数である。
【0186】
選択的には、前記実行ユニット73は、中間ベクトルを作成し、前記中間ベクトルは、少なくとも1つの中間ベクトルパラメータを含み、要素グループが存在している場合に、前記中間ベクトルパラメータの数は前記要素グループの数と等しいが、要素グループが存在していない場合に、前記中間ベクトルパラメータの数は前記ソース要素の数と等しく、前記選択された各ソース要素を前記中間ベクトルの対応する中間ベクトルパラメータにそれぞれ記憶し、前記中間ベクトルパラメータは選択されたソース要素と一対一に対応する関係があり、前記シャッフルパラメータに従い、各前記中間ベクトルパラメータのコンテンツを前記デスティネーションレジスタの対応する位置に書き込む。
【0187】
選択的には、前記オペコードは第3のオペコードであり、前記インデックス値は、第1のインデックス値、第2のインデックス値、第3のインデックス値、及び第4のインデックス値を含み、前記第1のインデックス値、第2のインデックス値、第3のインデックス値、及び第4のインデックス値はそれぞれ、異なる位置をインデックスし、前記ソースレジスタは第1のソースレジスタと第2のソースレジスタを含み、
前記実行ユニット73は、前記ソースレジスタ71において、N3ビットごとのMN3個の要素から、第1のインデックス値と第2のインデックス値によって指示されるソース要素をそれぞれ取得し、前記第2のソースレジスタにおいて、N3ビットごとのMN3個の要素から、第3のインデックス値と第4のインデックス値によって指示されるソース要素をそれぞれ取得し、前記要素のデータタイプはワードであり、N3ビットごとのMN3個の要素から選択されたソース要素の数はn3個であり、N3、MN3、及びn3はいずれも0よりも大きい正の整数であり、前記第1のインデックス値よって指示されるソース要素を第1のターゲット要素として決定して、第2のインデックス値よって指示されるソース要素を第2のターゲット要素として決定し、前記第3のインデックス値よって指示されるソース要素を第3のターゲット要素として決定して、第4のインデックス値よって指示されるソース要素を第4のターゲット要素として決定し、前記第1のターゲット要素と前記第2のターゲット要素を前記デスティネーションレジスタの第1の位置に書き込むとともに、前記第3のターゲット要素と前記第4のターゲット要素を前記デスティネーションレジスタの第2の位置に書き込む。
【0188】
選択的には、前記オペコードは第4のオペコードであり、
前記実行ユニット73は、前記ソースレジスタにおいて、Mn4個の要素から、各インデックス値によって指示されるソース要素をそれぞれ取得し、前記要素のデータタイプはダブルワードであり、選択されたソース要素の数はn4個であり、前記Mn4とn4はいずれも0よりも大きい正の整数である。
【0189】
選択的には、前記オペコードは第5のオペコードであり、前記インデックス値は第1のインデックス値と第3のインデックス値を含み、前記第1のインデックス値と第3のインデックス値はそれぞれ、異なる位置をインデックスし、前記ソースレジスタは第1のソースレジスタと第2のソースレジスタを含み、
前記実行ユニット73は、前記第1のソースレジスタにおいて、Mn5個の要素から、第1のインデックス値によって指示される第1のソース要素を取得し、前記第1のソースレジスタにおいて、Mn5個の要素から、第3のインデックス値によって指示される第2のソース要素を取得し、前記要素のデータタイプは4ワードであり、選択されたソース要素の数はn5個であり、n5は0よりも大きい正の整数であり、第1のソース要素と第2のソース要素をそれぞれターゲット要素として決定して、前記デスティネーションレジスタの対応する位置に書き込む。
【0190】
選択的には、前記ソースレジスタの数は1つ又は複数であり、前記デスティネーションレジスタの数は1であり、
前記ソースレジスタの数が1つである場合に、前記ソースレジスタ識別子と前記デスティネーションレジスタ識別子は同じ又は異なるものであってもよく、
前記ソースレジスタの数が複数である場合に、すべての前記ソースレジスタの各ソースレジスタ識別子はいずれも前記デスティネーションレジスタ識別子と異なるか、または、前記ソースレジスタの数が複数である場合に、すべての前記ソースレジスタには、前記デスティネーションレジスタ識別子と同じであるソースレジスタ識別子が1つ存在している。
【0191】
本願の実施例により提供されるプロセッサは、レジスタ識別子及びシャッフルパラメータを命令に追加し、シャッフルパラメータを用いて、ソースレジスタから取得された要素に対してベクトルシャッフル操作を実行することができるため、特定の機能を実現するために複数の命令によってシャッフル操作を実行する必要がなく、特定の機能のベクトルシャッフル操作を1つの命令によって実現することができ、特定の機能の実行効率を向上させる。
【0192】
実施例8
【0193】
図8に示すように、電子機器は、処理アセンブリ802、メモリ804、電源アセンブリ806、マルチメディアアセンブリ808、オーディオアセンブリ810、入力/出力(I/O)用インタフェース812、センサアセンブリ814、及び通信アセンブリ816のうちの1つ又は複数のアセンブリを含むことができる。
【0194】
処理アセンブリ802は、一般に、表示、データ通信、カメラ動作、及び記録動作に関連する動作など、電子機器の全体的な動作を制御する。処理コンポーネント802は、上述した方法のステップのすべて又は一部を完了させるために、命令を処理する1つ又は複数のプロセッサ820を含むことができる。また、処理アセンブリ802は、処理アセンブリ802と他のアセンブリとの間の相互作用を容易にするための1つ又は複数のモジュールを含むことができる。例えば、処理コンポーネント802は、マルチメディアアセンブリ808と処理アセンブリ802との間の相互作用を容易にするためのマルチメディアモジュールを含むことができる。
【0195】
メモリ804は、電子機器での操作をサポートするための様々なタイプのデータを記憶するように構成されている。このようなデータの例としては、電子機器上で操作される任意のアプリケーション又は方法の命令、連絡先データ、電話帳データ、メッセージ、画像、ビデオなどがある。メモリ804は、スタティックランダムアクセスメモリ(SRAM)、電気的に消去可能なプログラマブル読み取り専用メモリ(EEPROM)、消去可能なプログラマブル読み取り専用メモリ(EPROM)、プログラマブル読み取り専用メモリ(PROM)、読み取り専用メモリ(ROM)、磁気メモリ、フラッシュメモリ、磁気ディスク、または光ディスクのような任意のタイプの揮発性又は不揮発性記憶機器、またはそれらの組み合わせによって実装され得る。
【0196】
電源アセンブリ806は、電子機器の様々なアセンブリに電力を供給する。電源アセンブリ806は、電源管理システム、1つ又は複数の電源、及び端末800に供する電力の生成、管理、及び配電に関連するその他のアセンブリを含むことができる。
【0197】
マルチメディアアセンブリ808は、前記電子機器とユーザとの間の出力インタフェースを提供するスクリーンを含む。いくつかの実施例では、スクリーンは、液晶ディスプレイ(LCD)及びタッチパネル(TP)を含み得る。スクリーンがタッチパネルを含む場合、スクリーンはユーザからの入力信号を受信するためのタッチスクリーンとして実装され得る。タッチパネルは、タッチ、スワイプ、及びタッチパネル上でのジェスチャーを感知するための1つ又は複数のタッチセンサを含む。前記タッチセンサは、タッチ又はスワイプ操作の境界を感知するだけでなく、前記タッチ又はスワイプ操作に関連する持続時間及び圧力を検出することもできる。いくつかの実施例では、マルチメディアアセンブリ808は、1つのフロントカメラ及び/又はリアカメラを含む。フロントカメラ及び/又はリアカメラは、電子機器が撮影モード又はビデオモードなどの動作モードにあるときに、外部マルチメディアデータを受信することができる。各フロントカメラ及びリアカメラは、固定式光学レンズシステムであってもよいし、焦点距離及び光学ズーム機能を有するものであってもよい。
【0198】
オーディオアセンブリ810は、オーディオ信号を出力及び/又は入力するように構成されている。例えば、オーディオアセンブリ810は、端末が通話モード、録音モード、音声認識モードなどの動作モードにあるときに、外部オーディオ信号を受信するように構成されているマイクロフォン(MIC)を含む。受信されたオーディオ信号は、さらに、メモリ804に記憶されるか、通信アセンブリ816によって送信され得る。いくつかの実施例では、オーディオアセンブリ810は、オーディオ信号を出力するためのスピーカをさらに含む。
【0199】
I/Oインタフェース812は、処理アセンブリ802と周辺インタフェースモジュールとの間のインタフェースを提供し、上記の周辺インタフェースモジュールは、キーパッド、クリックホイール、ボタンなどであってもよい。これらのボタンは、ホームボタン、音量ボタン、スタートボタン、ロックボタンを含むことができるが、これらに限定されない。
【0200】
センサアセンブリ814は、電子機器800の状態の様々な側面の評価を提供するための1つ又は複数のセンサを含む。例えば、センサアセンブリ814は、電子機器800の開/閉状態、例えば前記アセンブリが端末のディスプレイ及びキーパッドであるようなアセンブリの相対的位置決めを検出することができ、センサアセンブリ814はまた、端末又は端末の1つのアセンブリの位置の変化、電子機器に対するユーザの接触の有無、電子機器の向き又は加速/減速、及び電子機器の温度の変化を検出することができる。センサアセンブリ814は、物理的な接触が一切なくても近くの物体の存在を検出するように構成されている近接センサを含むことができる。センサアセンブリ814はまた、撮像用途に使用するためのCMOS又はCCDイメージセンサなどの光学センサを含み得る。いくつかの実施例では、当該センサアセンブリ814はさらに、加速度センサ、ジャイロスコープセンサ、磁気センサ、圧力センサ、または温度センサを含み得る。
【0201】
通信アセンブリ816は、電子機器と他のデバイスとの間の有線又は無線通信を容易にするように構成されている。電子機器は、WiFi、2G/3G/4G/5G、またはそれらの組み合わせなどの通信規格に基づく無線ネットワークにアクセスすることができる。1つの例示的な実施例では、通信コンポーネント816は、ブロードキャストチャネルを経由して、外部のブロードキャスト管理システムからのブロードキャスト信号又はブロードキャスト関連情報を受信する。1つの例示的な実施例では、前記通信コンポーネント816は、近距離通信を容易にするための近距離通信(NFC)モジュールをさらに備える。例えば、NFCモジュールは、無線周波数識別(RFID)技術、赤外線データ協会(IrDA)技術、ウルトラワイドバンド(UWB)技術、ブルートゥース(登録商標)(BT)技術、及び他の技術に基づいて実装することができる。
【0202】
例示的な実施例では、電子機器は、上記のベクトルのシャッフル方法を実行するために、1つ又は複数のアプリケーション特定用途向け集積回路(ASIC)、デジタル信号プロセッサ(DSP)、デジタル信号処理デバイス(DSPD)、プログラマブルロジックデバイス(PLD)、フィールドプログラマブルゲートアレイ(FPGA)、コントローラー、マイクロコントローラー、マイクロプロセッサ、または他の電子素子によって実装され得る。
【0203】
例示的な実施例では、命令を含むメモリ804などの、命令を含む非一時的なコンピュータ可読記憶媒体をさらに提供し、上記の命令は、上記のベクトルのシャッフル方法を達成するために電子機器のプロセッサ820によって実行可能である。例えば、前記非一時的なコンピュータ可読記憶媒体は、ROM、ランダムアクセスメモリ(RAM)、CD-ROM、磁気テープ、フロッピーディスク、光データ記憶装置などであってもよい。
【0204】
本願の実施例に係る電子機器は、前述した複数の方法の実施例における対応するベクトルのシャッフル方法を実装するためのものであり、且つ対応する方法の実施の有益な効果を有しているため、ここでは繰り返して説明しない。
【0205】
本明細書における各実施例は漸進的に説明され、各実施例は他の実施例との相違点に焦点を当て説明を進んでおり、各実施例同士の同じ又は類似する部分は互いに参照すればよい。装置の実施例については、基本的に方法の実施例と類似しているため、説明は比較的に簡単であり、関連している箇所は、方法の実施例を参照して説明すればよい。
【0206】
以上は、本願により提供されるベクトルのシャッフル方法、プロセッサ及び電子機器について詳細に説明した。本明細書において、本願発明の原理及び実施形態は、特定の例を適用して説明されているが、以上の実施例は、単に本願発明の方法及びその主要な構想を理解するのに役立つために説明されており、同時に、当業者であれば、本願発明の構想に基づき、特定の実施形態及びその適用範囲に変化を加えることができる。以上のように、本明細書の記載は本願発明を制限するためのものとして理解すべきではない。
【0207】
本明細書で提供されるアルゴリズムや表示は、特定のコンピュータ、電子システム、その他のデバイスと本質的に関連するものではない。様々な汎用システムも、本明細書に基づく教示と組み合わせて使用することができる。そのようなシステムを構築するために必要な構造は、上記の説明に照らして明らかである。さらに、本願は、特定のプログラミング言語を対象とするものではない。本明細書で説明されている本願の内容を実装するために、様々なプログラミング言語を利用することができ、特定の言語に関する上記の説明は、本願の最良の実施形態を開示するために提供されることを理解されたい。
【0208】
本願により提供される明細書において、大量の具体的な詳細が記載されている。しかしながら、本願の実施例は、これらの具体的な詳細がなくても実施可能であることが理解され得る。いくつかの実例では、本明細書の理解を不明瞭にしないように、公知の方法、構造及び技術は詳細に示されていない。
【0209】
同様に、本開示を簡潔にして、様々な発明の1つ又は複数の態様の理解に役立つようにするために、本願の例示的な実施例の上記の説明において、本願の様々な特徴は、単一の実施例、図面、またはそれらに関する説明にまとめられていることがあることが理解されるべきである。しかしながら、当該開示に係る方法は、特許を請求する本願が、各請求項に明示的に記載されている特徴よりも多くの特徴を必要とする意図を反映するものと解釈されるべきではない。より正確にいうと、以下の特許請求の範囲に反映されているように、本発明の態様は、先に開示された個々の実施例に係るすべての特徴よりも少ない数の特徴がある。したがって、特定の実施形態に従う特許請求の範囲は、それによってその特定の実施形態に明示的に組み込まれ、各請求項自体が本願の別個の実施例として機能する。
【0210】
当業者であれば、実施例におけるデバイス内のモジュールを適応的に変更し、当該実施例とは異なる1つ又は複数のデバイスに配置することが可能であることを理解することができる。実施例におけるモジュール又はユニット又はアセンブリを、単一のモジュール又はユニット又はアセンブリに組み合わせることが可能であり、さらに、複数のサブモジュール又はサブユニット又はサブアセンブリに分割することも可能である。このような特徴及び/又はプロセスもしくはユニットの少なくとも一部が相互に排他的である場合を除き、本明細書(添付の特許請求の範囲、要約及び添付図面を含む)に開示されたすべての特徴及びこのように開示された方法又はデバイスのすべてのプロセス又はユニットを、任意の組み合わせで組み合わせることができる。本明細書(添付の特許請求の範囲、要約、及び添付図面を含む)に開示された各特徴は、特に明記されていない限り、同一、等価、または類似する目的を提供する代替的な特徴によって置き換えられてもよい。
【0211】
加えて、当業者は、本明細書に記載されているいくつかの実施例は、その他の実施例に含まれているその他の特徴ではなくいくつかの特徴を含むが、異なる実施例の特徴の組み合わせは、本願の範囲内のものであり、異なる実施例を形成していることを意味することを理解することができる。例えば、以下の特許請求の範囲では、主張される実施例のいずれか1つは任意の組み合わせで使用され得る。
【0212】
本願の様々な構成要素の実施例は、ハードウェア、または1つ又は複数のプロセッサ上で実行されるソフトウェアモジュール、またはそれらの組み合わせで実装され得る。当業者は、マイクロプロセッサ又はデジタル信号プロセッサ(DSP)が、本願の実施例によるブラウザクライアントデバイスにおける構成要素の一部又はすべての機能の一部又はすべてを実装するために実際に使用され得ることを理解すべきである。また、本願は、本明細書に記載の方法の一部又は全部を実行するためのデバイス又は装置プログラム(例えば、コンピュータプログラム及びコンピュータプログラム製品)として実装され得る。本願を実装するこのようなプログラムは、コンピュータ可読媒体に格納されているものであってもよいし、1つ又は複数の信号の形態を有するものであってもよい。このような信号は、インターネットサイトからダウンロード可能であってもよいし、キャリア信号で提供されてもよいし、任意の他の形態で提供されてもよい。
【0213】
上記の実施例は、本願を説明するためのものであり、本願を限定するものではなく、当業者であれば、添付の特許請求の範囲から逸脱することなく、代替の実施例を設計することができることに留意されたい。特許請求の範囲において、括弧の間に位置する参照符号は、特許請求の範囲を限定するものとして解釈されるべきではない。用語「含む」は、特許請求の範囲に記載されていない素子又はステップの存在を排除しない。素子の前にある用語「一」又は「1つ」は、そのような素子が複数存在することを除外しない。本願は、いくつかの異なる素子を含むハードウェア、及び適切にプログラムされたコンピュータによって実装され得る。いくつかの装置を列挙している個別の請求項では、これらの装置のいくつかが、同一のハードウェアによって具現化され得る。第1、第2、第3といった用語の使用は、いかなる順序を示すものではない。これらの用語は名称として解釈されてもよい。
【0214】
本願は、2021年12月10日に中国国家知的産権局に提出された、出願番号が202111508098.8であり、発明の名称が「ベクトルのシャッフル方法、プロセッサ及び電子機器」である中国特許出願の優先権を主張しており、その内容の全ては、本願に参照によって取り込まれる。
【手続補正書】
【提出日】2024-07-11
【手続補正1】
【補正対象書類名】明細書
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【発明の詳細な説明】
【技術分野】
【0001】
本願は、コンピュータ技術の分野に関し、特に、ベクトルのシャッフル方法、プロセッサ及び電子機器に関する。
【背景技術】
【0002】
マルチメディアアプリケーションの発展につれて、より多くのプロセッサのコンピューティングタスクは、デジタル画像処理の分野に由来するものであり、画像ベースのアプリケーションは、サーバ、デスクトップコンピュータ、パーソナルモバイルデバイスすなわち組み込み機器における無視できないワークロードとなっている。デジタル画像処理ソフトウェアの実情に合わせて命令セットアーキテクチャを更新し、アプリケーションで一般的に使用される操作の命令サポートをプロセッサに追加することは、プロセッサ発展の主な方向であり、特定のアプリケーションに対するプロセッサの性能を向上させる簡単で効果的な方法でもあるため、規則的なデータセットでの同じ操作をサポートする単一命令列複数データ(Single Instruction Multiple Data、SIMD)アーキテクチャを追加するプロセッサが増えている。
【0003】
現在、SIMDプロセッサにおいて、シャッフル命令が広く導入されており、異なるシャッフル命令は異なる需要を満たすことができるが、従来の技術的解決手段において、特定の機能のベクトルシャッフル操作を実現する時、一連の操作を実現するには複数の命令が必要とされ、操作方式が複雑であり、かつ特定の機能の実行効率を低下させている。
【発明の概要】
【発明が解決しようとする課題】
【0004】
本願は、従来の技術において、一連の操作を実現するには複数の命令が必要とされ、操作方式が複雑であり、特定の機能の実行効率を低下させるという問題を解決するために、ベクトルのシャッフル方法、プロセッサ及び電子機器を提供する。
【課題を解決するための手段】
【0005】
上記の問題を解決するために、本願は、ベクトルのシャッフル方法を開示し、前記方法は、
レジスタ識別子及びシャッフルパラメータを含む命令を受信するステップであって、ここで、前記レジスタ識別子は、ソースレジスタ識別子及びデスティネーションレジスタ識別子を含み、前記ソースレジスタ識別子は、ソースレジスタを示すためのものであり、前記ソースレジスタは、ベクトルシャッフル操作実行時に操作されるソース要素を記憶するレジスタであり、前記デスティネーションレジスタ識別子は、デスティネーションレジスタを示すためのものであり、前記デスティネーションレジスタは、前記ベクトルシャッフル操作実行後に得られるターゲット要素を記憶するレジスタであり、前記シャッフルパラメータは、前記ソース要素に対するベクトルシャッフル操作の実行時に準拠するパラメータを指示するためのものである、ステップと、
前記命令を実行し、前記シャッフルパラメータに従って前記ソースレジスタから取得されたソース要素に対してベクトルシャッフル操作を実行するとともに、前記ベクトルシャッフル操作を行った後のターゲット要素を取得するステップと、
前記ターゲット要素を前記デスティネーションレジスタに書き込むステップと、を含む。
【0006】
上記の問題を解決するために、本願は、プロセッサを開示し、前記プロセッサは、
データ要素を記憶するためのソースレジスタ、及びターゲットレジスタを含む、複数のベクトルレジスタと、
ソースレジスタ識別子及びデスティネーションレジスタ識別子を含むレジスタ識別子、及びシャッフルパラメータを含むベクトルシャッフル命令を復号化するための復号化ユニットと、
前記ベクトルシャッフル命令に応答し、前記シャッフルパラメータに従って前記ソースレジスタから取得されたソース要素に対してベクトルシャッフル操作を実行するとともに、前記ベクトルシャッフル操作を行った後のターゲット要素を取得して、前記ターゲット要素を前記デスティネーションレジスタに書き込む、実行ユニットと、を含む。
【0007】
上記の問題を解決するために、本願は、メモリ及び1つ以上のプログラムを含む電子機器を開示し、1つ以上のプログラムは、メモリに記憶されており、且つ1つ以上のプロセッサにより前述したベクトルのシャッフル方法を実行するように構成されている。
【発明の効果】
【0008】
本願は、従来の技術に比べて、次の利点がある。
【0009】
本願の実施例により提供されるベクトルのシャッフル方法、プロセッサ及び電子機器は、レジスタ識別子及びシャッフルパラメータを命令に追加し、シャッフルパラメータを用いて、ソースレジスタから取得された要素に対してベクトルシャッフル操作を実行することができるため、特定の機能を実現するために複数の命令によってシャッフル操作を実行する必要がなく、特定の機能のベクトルシャッフル操作を1つの命令によって実現することができ、特定の機能の実行効率を向上させる。
【図面の簡単な説明】
【0010】
【
図1】本願の実施例1により提供される1つのベクトルのシャッフル方法のステップのフローチャートである。
【
図2】本願の実施例2により提供される1つのベクトルのシャッフル方法のステップのフローチャートである。
【
図3】本願の実施例3により提供される1つのベクトルのシャッフル方法のステップのフローチャートである。
【
図4】本願の実施例4により提供される1つのベクトルのシャッフル方法のステップのフローチャートである。
【
図5】本願の実施例5により提供される1つのベクトルのシャッフル方法のステップのフローチャートである。
【
図6】本願の実施例6により提供される1つのベクトルのシャッフル方法のステップのフローチャートである。
【
図7】本願の実施例により提供されるプロセッサの構造ブロック図である。
【
図8】本願の実施例により提供される電子機器の構造ブロック図である。
【発明を実施するための形態】
【0011】
本願の上記の目的、特徴及び利点をさらに明瞭し、理解しやすくするために、以下は図面と特定の実施形態を参照して本願についてさらに詳細に説明する。
【0012】
本明細書および特許請求の範囲、ならびに上記の図面における、「第1の」、「第2」、「第3」などの用語は、類似または同種のオブジェクトまたはエンティティを区別するために使用されており、特に明記されていない限り(Unless otherwise indicated)、特定の順序または優先順位を限定することを必ずしも意味しない。このように使用される用語は、例えば、本願の実施例の図示または説明に示されている順序以外の順序で実施され得るように、適宜交換可能であることが理解されるべきである。
【0013】
以下の実施例は、プロセッサを参照して説明されるが、他の実施例は、他のタイプの集積回路および論理装置に適用可能である。本願の上記の技術及び教示は、より高いパイプラインスループット及び改善された性能の恩恵を受ける他のタイプの回路又は半導体装置に容易に適用することができる。本願の実施例は、データ操作を実行する任意のプロセッサまたはマシンに適用可能である。しかし、本願は、256ビット、128ビット、64ビット、32ビット、または16ビットのデータ操作を実行するプロセッサまたはマシンに限定されず、複合データが操作される必要がある任意のプロセッサおよびマシンに適用可能である。
【0014】
以下の説明では、説明の目的で、本願の完全な理解を提供するために多くの特定の詳細が示される。しかしながら、当業者は、これらの特定の詳細が本願を実施するために必要ではないことを認識すべきである。他の場合においては、いくつかの周知の電気的構造および回路は、本願を不必要に混乱させることを避けるために詳細に示されていない。また、以下の説明では、説明のために複数の例が提供され種々の例を図面に示している。しかしながら、これらの例は、本願のいくつかの例を提供することだけを目的としており、本願のすべての可能な実施形態の網羅を提供するものではないので、限定的なものとして解釈されるべきではない。
【0015】
以下の例は、実行ユニットのコンテキストにおける命令処理および分配について説明するが、本願の他の実施例は、ソフトウェアの形態で実施されてもよい。1つの実施例において、本願の方法は、機械実行可能命令として表される。前記命令は、これらの命令でプログラミングされた汎用プロセッサまたは専用プロセッサに、本願のステップを実行させるために使用することができる。本願のステップは、前記ステップを実行するためのハードワイヤードロジックを含む専用ハードウェアコンポーネントによって、またはプログラミングされたコンピュータコンポーネントとカスタムハードウェアコンポーネントとの任意の組み合わせによって実行することができる。これらのソフトウェアは、システム内のメモリに記憶できる。
【0016】
実施例1
【0017】
図1を参照されたい。
図1は、本願の実施例により提供される1つのベクトルのシャッフル方法のステップのフローチャートを示している。
【0018】
本願の実施例により提供されるベクトルのシャッフル方法は、その実行主体がCPU(Central Processing Unit、中央処理装置)であってもよく、次のステップ101~ステップ103を含む。
【0019】
ステップ101では、レジスタ識別子及びシャッフルパラメータを含む命令を受信する。
【0020】
本願の実施例では、命令とは、ベクトルシャッフル操作を実行するための命令であり、且つ当該命令はCPUによる実行に供する命令である。
【0021】
ベクトルシャッフル操作実行時に、ベクトルシャッフル操作を実行するための命令をCPUにより受信することができ、当該命令には、レジスタ識別子及びシャッフルパラメータを含む。
【0022】
レジスタ識別子は、ソースレジスタ識別子及びデスティネーションレジスタ識別子を含むことができ、ソースレジスタ識別子は、ソースレジスタを示すためのものであり、当該ソースレジスタは、ベクトルシャッフル操作実行時に操作されるソース要素を記憶するレジスタであり、当該シャッフル操作実行時に操作されるソース要素は、ソースレジスタに記憶されているすべてのデータであってもよいし、ソースレジスタに記憶されているデータの一部であってもよい。デスティネーションレジスタ識別子は、デスティネーションレジスタを示すためのものであり、当該デスティネーションレジスタは、ベクトルシャッフル操作実行後に得られるターゲット要素を記憶するレジスタである。
【0023】
本例では、ソースレジスタの数は、1つであってもよいし、2つであってもよく、すなわち、ソース要素は、1つ又は2つのレジスタに由来するものであり、具体的には、ソースレジスタの数は、業務上の必要に応じて決定することができ、本願の実施例はこれを制限しない。
【0024】
シャッフルパラメータは、ソース要素に対するベクトルシャッフル操作の実行時に準拠するパラメータを指示するために使用することができ、本例では、シャッフルパラメータは、インデックス値やオペコードなどのパラメータを含むことができ、選択的には、インデックス値は即値の形式で示され、オペコードはバイナリ形式で示されるコードであるか、またはオペコードはバイナリコードに変換可能な識別子である。
【0025】
命令が受信された後、ステップ102を実行する。
【0026】
ステップ102では、前記命令を実行し、前記シャッフルパラメータに従って前記ソースレジスタから取得されたソース要素に対してベクトルシャッフル操作を実行するとともに、前記ベクトルシャッフル操作を行った後のターゲット要素を取得する。
【0027】
ターゲット要素とは、ソースレジスタ内の要素に対してベクトルシャッフル操作を実行した後に得られる要素である。
【0028】
本願の実施例では、ベクトルシャッフル操作を実行するための命令をCPUが受信した後、CPUにより当該命令を実行し、シャッフルパラメータに従ってソースレジスタから取得されたソース要素に対してベクトルシャッフル操作を実行するとともに、ベクトルシャッフル操作実行後のターゲット要素を取得することができる。
【0029】
ステップ103では、前記ターゲット要素を前記デスティネーションレジスタに書き込む。
【0030】
本願の実施例では、ベクトルシャッフル操作を行った後のターゲット要素が取得された後、ターゲット要素をデスティネーションレジスタに書き込むことができる。
【0031】
選択的には、シャッフルパラメータに従ってソース要素を取得し、ベクトルシャッフル操作を実行し、ターゲット要素を取得する方法は、ベクトルシャッフル操作に必要なソース要素のソースレジスタにおける位置情報及び前記ベクトルシャッフル操作に必要なソース要素の数に従い、ソースレジスタからソース要素を選択し、選択されたすべてのソース要素をターゲット要素とするステップを含み、具体的には、下記の特定の実現形態を参照して詳細に説明することができる。
【0032】
本願の1つの特定の実現形態では、上記のステップ102は、次のサブステップA1~サブステップA3を含むことができる。
【0033】
サブステップA1では、前記シャッフルパラメータに従い、ソース要素の前記ソースレジスタにおける位置情報及び前記ベクトルシャッフル操作に必要なソース要素の数を決定し、選択された前記ソース要素の数は1つ又は複数である。
【0034】
本願の実施例では、シャッフルパラメータには、ソース要素のソースレジスタにおける位置情報及びソース要素の数を指示するためのパラメータが含まれている。
【0035】
CPUは、ベクトルシャッフル操作を実行するための命令を受信した後、当該命令を解析し、命令に含まれているシャッフルパラメータを解析して得ることができる。
【0036】
命令に含まれているシャッフルパラメータを解析して得た後、シャッフルパラメータに従ってベクトルシャッフル操作に必要なソース要素のソースレジスタにおける位置情報及び前記ベクトルシャッフル操作に必要なソース要素の数を決定することができ、選択されたソース要素の数は、1つあってもよいし、複数あってもよく、この後の例では、複数ある場合を例にして説明する。
【0037】
シャッフルパラメータに従ってソース要素のソースレジスタにおける位置情報及びソース要素の数を決定した後、サブステップA2を実行する。
【0038】
サブステップA2では、決定された前記位置情報及びソース要素の数に従い、前記ソースレジスタからソース要素を選択する。
【0039】
シャッフルパラメータに従ってソース要素のソースレジスタにおける位置情報及びソース要素の数を決定するとき、ソースレジスタからソース要素を選択する。
【0040】
決定された位置情報及びソース要素の数に従ってソースレジスタからソース要素を選択した後、サブステップA3を実行する。
【0041】
サブステップA3では、すべての前記選択されたソース要素をターゲット要素として決定する。
【0042】
決定された位置情報及びソース要素の数に従ってソースレジスタからソース要素を選択した後、すべての選択されたソース要素をターゲット要素として、デスティネーションレジスタに書き込むことができる。
【0043】
本願の実施例では、シャッフルパラメータは、インデックス値及びオペコードを含むことができ、インデックス値及びオペコードを用いてソース要素を選択しており、具体的には、下記の特定の実現形態を参照して詳細に説明することができる。
【0044】
選択的には、前記インデックス値は、前記ベクトルシャッフル操作に必要な各ソース要素の前記ソースレジスタにおける位置情報を指示するためのものであり、前記オペコードは、前記ソースレジスタ及びデスティネーションレジスタに対する操作を示すためのものであり、上記のサブステップA2は、次のサブステップB1~サブステップB2を含むことができる。
【0045】
サブステップB1では、前記インデックス値及び前記オペコードに従い、ソース要素を取得する選択ルールを決定する。
【0046】
本願の実施例では、選択ルールとは、ソースレジスタからソース要素を読み取るための制限条件を指す。
【0047】
シャッフルパラメータが取得された後、シャッフルパラメータに含まれているインデックス値及びオペコードに従ってソースレジスタからソース要素を取得する選択ルールを決定することができる。具体的には、次の2種類の場面に分けられる。
【0048】
第1の種の場面では、インデックス値の数とソース要素の数が異なる場合に、インデックス値の数に従ってソース要素のグループ化方式を決定し、当該グループ化方式及びオペコードに従いソース要素を取得する選択ルールを決定することができ、すなわち、まず、ソースレジスタ内のソース要素をグループ化し、例えばN個の隣接するソース要素を1つのグループとして、そして、インデックス値に従い、グループ化された要素からソース要素の選択ルールを取得するようにしているが、通常、Nは4であり、当然ながら、Nは、ソースレジスタのビット数などの具体的な応用シーンに応じて決定することができ、ここで繰り返して説明しない。
【0049】
第2種の場面では、インデックス値の数とソース要素の数が同じである場合に、オペコードに従ってソース要素を取得する選択ルールを決定することができる。
【0050】
インデックス値及びオペコードに従ってソース要素を取得する選択ルールを決定した後、サブステップB2を実行する。
【0051】
サブステップB2では、ソースレジスタから、前記選択ルールに遵い、各インデックス値によって指示されるソース要素をそれぞれ取得する。
【0052】
インデックス値及びオペコードに従ってソース要素を取得する選択ルールを決定した後、選択ルールに遵い、ソースレジスタから、各インデックス値によって指示されるソース要素をそれぞれ取得することができる。
【0053】
実際に応用する際、CPUは、ベクトルシャッフル命令のオペコードを用いて、インデックス値の数とソース要素の数が同じであるか否かを決定し、すなわち、CPUは、オペコードに従ってソース要素のグループ化状況及び選択ルールを決定することができる。
【0054】
選択的には、インデックス値とデスティネーションレジスタ内のアドレスとの間には所定の対応関係がある。選択的には、ターゲット要素を前記デスティネーションレジスタの前記即値に対応する位置に書き込むことは、すなわち、デスティネーションレジスタからインデックス値に対応する位置を決定し、ソース要素を決定された位置に順次記憶することである。具体的には、いずれのソース要素も、決定されたインデックス値によって取得されたものであり、当該ソース要素は、当該決定されたインデックス値と対応関係にあるデスティネーションレジスタ内のアドレスに書き込まれており、例示的に、ソース要素Aは、インデックス値ui8[1:0](ui8は即値を表し、当該即値ui8は1つのグループのデータを表すインデックス値であり、ui8[1:0]は当該即値の最下位2ビットからなる数を表す)によって取得されるが、インデックス値ui8[1:0]は、デスティネーションレジスタの1つのグループのアドレス内の最下位アドレスに対応し、このとき、取得されたソース要素Aは、1つのターゲット要素としてデスティネーションレジスタの最下位アドレスに書き込まれる。一例として、即値ui8は、8ビットを含む1つのグループのデータであり、即値ui8を使用して4つのインデックス値を構成し、ui8の2ビットごとに構成される数を1つのインデックス値とする。一方、これらのインデックス値のui8における位置やシーケンス番号は、インデックス値から取得されたソース要素がデスティネーションレジスタに移動されるべき要素位置を指示又は暗示している。例えば、インデックス値ui8[7:6]がui8の4番目のインデックス値である場合に、それに対応するソース要素はデスティネーションレジスタの4番目の要素位置に書き込まれる。同様に、ui8[n:n-1]がui8における(n+1)/2番目のインデックス値である場合に、それに対応するソース要素はデスティネーションレジスタの(n+1)/2番目の要素位置に書き込まれる。即値には、他の数のインデックス値を含むことができ、これに応じて、即値におけるi番目のインデックス値に対応するソース要素はデスティネーションレジスタのi番目の要素位置に書き込まれ、iは正の整数である。
【0055】
従来の技術において、SHUF命令(シャッフル命令の1種)を実現する際、シャッフルモードに応じて当該1つのシャッフル命令を設定して、異なる機能のシャッフル効果を得ることができ、当該シャッフルモードは、応用時の必要に応じて決定され、通常、他の少なくとも1つの命令によってシャッフルモードを呼び出して、当該シャッフルモードを上記のシャッフル命令に伝送してもよいし、または、シャッフルモードをメモリに追加してもよく、上記のシャッフル命令の実行中に、当該シャッフルモードをメモリにアクセスすることによって取得している。このことからわかるように、従来の技術においては、異なるシャッフルモードにおけるシャッフル命令を実現するために、複数の命令を必要とするか、または、メモリにアクセスする必要があり、複数の命令を用意するか、または、メモリにアクセスするかのどちらも、シャッフル命令実装時にCPUシステム全体のオーバーヘッドを大幅に増加する。従来の技術における技術的問題に鑑みて、本願の実施例では、シャッフルパラメータ(オペコード及びインデックス値)を命令に追加することによって、異なるシャッフルパラメータを用いて異なるシャッフルモードにおけるシャッフル命令を実装することができ、複数の命令によってデータシャッフルを実現する必要がなく、メモリにアクセスすることによってシャッフルモードを取得する必要もなくなるため、データシャッフル操作をシャッフル命令1つで実現することができ、システムオーバーヘッドを効果的に低下させる。
【0056】
インデックス値は即値によって実装することができるため、オペコードは、バイナリ形式で示されるコードで実装されてもよいし、またはオペコードはバイナリコードに変換可能な識別子として実装されてもよいため、実施例1における、オペコード及びインデックス値を含むベクトルシャッフル命令の実装方法を参照して、異なるオペコードを含むベクトルシャッフル命令の具体的な処理方式について、次の特定の実施例2~実施例6を用いて詳細に説明する。
【0057】
実施例2
【0058】
本願の1つの特定の実現形態では、前記オペコードは、第1のオペコードであり、且つ前記インデックス値の数と前記ソース要素の数は異なる。
図2に示すように、ベクトルシャッフル命令の処理方式は、次のステップ201~ステップ205を含むことができる。
【0059】
ステップ201では、レジスタ識別子及びシャッフルパラメータを含む命令を受信する。
【0060】
本願の実施例では、命令の意味及び命令に含まれているパラメータは、実施例1に記載されているものであり、ここで繰り返して説明しない。
【0061】
選択的には、ソースレジスタの数は1つであり、すなわちソース要素は1つのレジスタに由来するものである。
【0062】
選択的には、シャッフルパラメータは、インデックス値及びオペコードを含み、インデックス値は即値の形式で実装され、オペコードは、バイナリコードに転化可能な識別子の形式で実装され、且つオペコードは第1のオペコードである。
【0063】
選択的には、命令のフォーマットは、「オペコード デスティネーションレジスタ,ソースレジスタ,即値」である。当該命令のフォーマットに従い、具体的に実装する際、命令は、「[X]VS.{B/H/W} vd,vj,ui8」と示すことができ、[X]VSは第1のオペコードの命令名称であり、[X]は異なるビット数のレジスタを区別するためのオプションで、{B/H/W}は第1のオペコードのデータタイプで、Bはデータタイプがバイトであることを示し、Hはデータタイプがハーフワードであることを示し、Wはデータタイプがワードであることを示し、[X]VS.{B/H/W}は識別子形式の第1のオペコードであり、vdはデスティネーションレジスタを示し、vjはソースレジスタを示し、ui8は即値を示す。例示的に、VS.{B/H/W}は、[X]VS.Bを01110011100100バイナリ形式に変換する第1のオペコードのようなバイナリ形式に転化可能な第1のオペコードである。また、即値は、1つのグループのデータであってもよく、レジスタの異なる位置のインデックス値は、即値ui8の異なるビットであるui8[1:0]、ui8[3:2]、ui8[5:4]、ui8[7:6]で示され得る。
【0064】
ステップ202では、前記命令を実行して、前記オペコード及び前記インデックス値に従い、前記ソースレジスタ内の隣接する要素をN1個ごとに1つのグループの要素グループとして構成し、前記要素のデータタイプは、バイト、ハーフワード、ワードのいずれか1つであり、N1は0よりも大きい正の整数である。
【0065】
本願の実施例では、インデックス値の数とソース要素の数が異なる場合に、ソースレジスタ内の隣接する要素をN1個ごとに1つのグループの要素グループとして構成することができ、当該隣接する要素のデータタイプは、バイト、ハーフワード、ワードのいずれか1つであってもよく、例えば、ソースレジスタ内の隣接するワード要素を4個ごとに1つのグループの要素グループとして構成することができる。インデックス値の数とソース要素の数が異なる場合に、ソースレジスタ内の隣接する要素をN1個ごとに1つのグループの要素グループとして構成し、当該隣接する要素のデータタイプは、バイト、ハーフワード、ワードのいずれか1つであってもよく、要素グループからソース要素を選択し、N1は0よりも大きい正の整数であるなどの複数の条件を選択ルールとして決定する。例えば、N1はインデックス値の数であるようにすることによって、インデックス値の数がソース要素の数よりも少ない場合においても、N1とソース要素との数の差に応じて、ソース要素をグループ化し、インデックス値の数が各グループ内のソース要素の数に等しく、かつ各インデックス値がグループ内のソース要素と一対一に対応するようにする。
【0066】
隣接する要素はソースレジスタにおいて位置が順次隣接する要素であり、隣接する複数の要素グループにおける要素アドレスは、部分的に同じまたは完全に異なることがあり、当該要素アドレスは要素のレジスタにおける位置情報となる。隣接する複数の要素グループの間には同じ位置情報の要素がある場合に、2つの隣接する要素グループごとの同じ位置情報の要素の数の最大値はN1-1である。さらに、隣接する要素はソースレジスタにおける交差して隣接する要素である。例示的に、オペコードが第1のオペコードである場合に、データタイプは、バイト、ハーフワード、またはワードであり、ソースレジスタには、要素A1、要素A2、要素A3、要素A4、要素A5、要素A6、要素A7、要素A8という8つの要素がそれぞれ含まれていると想定して、上記の要素の位置情報は示された順序に遵って順次隣接し、N1=4であり、N1個の要素は、順次隣接する要素であってもよいし、交差して隣接する要素であってもよく、例えば、N1が4である場合に、ソースレジスタには、要素A1、要素A2、要素A3、要素A4、要素A5、要素A6、要素A7、要素A8という8つの要素がそれぞれ含まれていると想定すると、N1個の要素は、要素A2~A5であってもよいし、要素A1、要素A3、要素A5、要素A7のような交差して隣接する要素であってもよい。
【0067】
上記の実施例に基づき、前記ソースレジスタ内の隣接する要素をN1個ごとに1つのグループの要素グループとして構成することは、2つの場面を含む。
【0068】
第1種の場面では、要素A1~A4を一方のグループの要素グループとして構成し、要素A5~A8を他方のグループの要素グループとして構成し、2つの要素グループの間には同じ位置情報の要素がない一方、
第2種の場面では、要素A1~A4を一方のグループの要素グループとして構成し、要素A2~A5を他方のグループの要素グループとして構成し、2つの要素グループの間には同じ位置情報の要素が3つある(すなわち要素A2、要素A3、要素A4)。その他、2つの隣接する要素グループごとの同じ位置情報の要素の数の最大値がN1-1であることが満たされれば、要素A3~A6を他方のグループの要素グループとして選択するか、または要素A4~A7を他方のグループの要素グループとして選択してもよく、ここで繰り返して説明しない。
【0069】
選択的には、分割された複数の要素グループには、各要素グループ内に含まれている要素のデータタイプは同じであり、異なる要素グループ内に含まれている要素のデータタイプは同じである。例えば、分割された要素グループは、要素グループ1、要素グループ2、及び要素グループ3を含み、要素グループ1、要素グループ2、及び要素グループ3に含まれている要素のデータタイプは、いずれもバイトであるか、または、要素グループ1、要素グループ2、及び要素グループ3に含まれている要素のデータタイプは、いずれもハーフワードであるか、または、要素グループ1、要素グループ2、及び要素グループ3に含まれている要素のデータタイプはいずれもワードである。
【0070】
さらに、異なる要素グループは同じインデックス値が使用されているか、または、異なる要素グループは完全に同じではないインデックス値が使用されており、例示的に、異なる要素グループは同じインデックス値が使用されている場合に、要素グループ1から要素グループ4はいずれも、同じインデックス値ui8が使用されているが、異なる要素グループは完全に同じではないインデックス値が使用されている場合に、要素グループ1と要素グループ2はソース要素選択のためにui8aをインデックス値として使用しており、要素グループ3と要素グループ4はソース要素選択のためにui8bをインデックス値として使用しており、ui8aとui8bはui8の異なる位置を示し、且つ異なる値のインデックス値を示している。
【0071】
別の例では、複数の要素グループには、要素グループ内の各要素のデータタイプは同じであるが、異なる要素グループ(例えば、要素グループ1と要素グループ2)内の要素はデータタイプが異なる。さらに、各要素グループの要素数は同じ又は異なる。例えば、要素グループ1は4つの要素があり、要素グループ2は2つの要素があると、同じ即値ui8は、要素グループ1に4つのインデックス値を提供し、要素グループ2に2つのインデックス値を提供する。
【0072】
上述の例は、本願の実施例に係る技術的解決手段をよりよく理解するための単なる例であり、本願の実施例を一意に限定するものではないことを理解されたい。
【0073】
ソースレジスタ内の隣接する要素をN1個ごとに1つのグループの要素グループとして構成した後、ステップ203を実行する。
【0074】
ステップ203では、各要素グループにおける要素を初期ソース要素として決定する。
【0075】
本願の実施例では、ソースレジスタ内の隣接する要素をN1個ごとに1つのグループの要素グループとして構成した後、各要素グループにおける要素を初期ソース要素として決定することができる。初期ソース要素とは、ソース要素を選択するための初期要素を指す。
【0076】
各要素グループの要素を初期ソース要素として決定した後、ステップ204を実行する。
【0077】
ステップ204では、前記初期ソース要素から、各インデックス値によって指示されるソース要素をそれぞれ取得し、各前記要素グループから選択されたソース要素の数はn1個である。
【0078】
本願の実施例では、初期ソース要素が決定された後、初期ソース要素から、各即値によって指示されるソース要素をそれぞれ取得し、すなわち即値に従って要素グループから対応するソース要素を選択することができる。各要素グループから選択されたソース要素の数はn1個あり、n1は0よりも大きい正の整数である。
【0079】
選択的には、即値と各グループの要素グループにおける要素位置との間には所定の対応関係があり、当該要素位置は、要素アドレスであってもよいし、要素の要素グループにおけるシーケンスビットであってもよく、シーケンスビットは、要素の要素グループにおける位置番号を表すものである。
【0080】
選択的には、前記初期ソース要素から、各即値によって指示されるソース要素をそれぞれ取得することは、すなわち、各要素グループから、即値に対応する要素位置における要素をそれぞれ取得し、取得された要素をソース要素として決定することである。異なる要素グループから選択されたソース要素の数は同じである。
【0081】
具体的に実装する際、オペコードが第1のオペコードであり、N1=4とし、データタイプがバイト、ハーフワード、またはワードである場合に、各要素グループに含まれている初期ソース要素の個数は同じで、いずれも4つあり、各要素グループから即値に対応するソース要素を選択し、n1は4であり、N1=n1である。例えば、即値が要素アドレス3を示す場合、アドレスが3の要素を各要素グループから選択し、選択されたすべての要素をソース要素として決定し、また、例えば、即値はシーケンスビットが3であることを示す場合に、最初の要素から順番数えて3番目の要素を各要素グループから選択し、選択されたすべての要素をソース要素として決定する。
【0082】
選択的には、N1はn1に等しい又は等しくないが、N1=n1である場合に、ステップ204を実行せずに、ステップ203の各要素グループにおける要素を直接に選択された要素としてもよい。
【0083】
さらに、各要素グループから選択されたソース要素の数は4つあり、ソース要素のデータタイプは、バイト、ハーフワード、またはワードであるが、通常、選択された各ソース要素のデータタイプは同じである。
【0084】
ステップ205では、選択されたソース要素をターゲット要素として決定して、ターゲット要素を前記デスティネーションレジスタの前記インデックス値に対応する位置に書き込む。
【0085】
本願の実施例では、即値とデスティネーションレジスタ内のアドレスとの間には所定の対応関係がある。選択的には、ターゲット要素を前記デスティネーションレジスタの前記即値に対応する位置に書き込むことは、すなわち、デスティネーションレジスタから、即値に対応する位置を決定し、ソース要素を決定された位置に順次記憶することである。
【0086】
さらに、1つの実行可能な解決手段では、ステップ201とステップ202との間に、中間ベクトルを作成するステップを追加し、具体的には、決定された前記位置情報及びソース要素の数に従い、前記ソースレジスタからソース要素を選択する前、中間ベクトルを作成することができ、前記中間ベクトルは少なくとも1つの中間ベクトルパラメータを含み、前記中間ベクトルパラメータの数は前記ターゲット要素の数と等しい。作成された中間ベクトルに基づき、ステップ204の後、すなわち前記ソースレジスタからソース要素を選択した後、前記選択された各ソース要素を前記中間ベクトルの対応する中間ベクトルパラメータにそれぞれ記憶し、前記中間ベクトルパラメータは、選択されたソース要素と一対一に対応する関係があり、ステップ205は、すなわち、前記即値に応じて、各前記中間ベクトルパラメータのコンテンツを前記デスティネーションレジスタの対応する位置に書き込むステップである。
【0087】
選択的には、前記中間ベクトルはソースレジスタに応じて作成されてもよく、ソースレジスタのタイプなどに応じて中間ベクトルを作成してもよい。
【0088】
選択的には、前記中間ベクトルにおける中間ベクトルパラメータの数とターゲット要素数は同じであり、且つインデックス値に応じて、デスティネーションレジスタにおける各ターゲット要素の位置と中間ベクトルにおける各中間ベクトルパラメータとは所定の対応関係があり、ソース要素がグループ化された場合、前記即値に応じて、各前記中間ベクトルパラメータのコンテンツを前記デスティネーションレジスタの対応する位置に書き込むことは、すなわち、パラメータiを設定し、iは、定数を表し、iの値の範囲は0~n-1であり、nは、レジスタビット数とデータタイプに応じて決定されるものであり、N1とiに応じて、中間ベクトルの各中間ベクトルパラメータによってインデックスされるソースレジスタにおけるソース要素を決定し、iに対して、0からn-1までの値を巡回して取ると同時に、中間ベクトルにおける異なるインデックス値に対応するソース要素をターゲットレジスタにおける当該インデックスに対応するターゲット要素位置に書き込む。具体的には、[N1i]、[N1i+1]、[N1i+2]……[N1i+N1-1]はそれぞれ異なる位置を示し、中間ベクトルは、「中間ベクトル={VR[ソースレジスタ].データタイプ[N1i+N1-1]、……VR[ソースレジスタ].データタイプ[N1i]}」と示すことができ、iは定数を表し、iの値の範囲は0~n-1であり、nはレジスタビット数とデータタイプに応じて决定され、例えば、レジスタビット数が128ビットで、データタイプがバイトである場合に、nは4であり、レジスタビット数が128ビットで、データタイプがハーフワードである場合に、nは2であり、レジスタビット数が128ビットで、データタイプがワードである場合に、nは1である。
【0089】
上記の中間ベクトルの解決手段に基づき、例示的に、第1のオペコードがVS.Bで、vjがソースレジスタである場合には、vec0={VR[vj].B[4i+3],VR[vj].B[4i+2], VR[vj].B[4i+1],VR[vj].B[4i]}という中間ベクトルを作成し、VR[vj].B[4i+3]、VR[vj].B[4i+2]、VR[vj].B[4i+1]、VR[vj].B[4i]はいずれも、中間ベクトルパラメータであり、iは定数を表し、[4i+0]、[4i+1]、[4i+2]、[4i+3]はレジスタの4つの連続する位置を表し、iの値の範囲は0~3である。各前記中間ベクトルパラメータのコンテンツを前記デスティネーションレジスタvdの対応する位置に書き込むことは、次のように示すことができる。
VR[vd].B[4i+0] = vec0.B[ui8[1:0]]
VR[vd].B[4i+1] = vec0.B[ui8[3:2]]
VR[vd].B[4i+2] = vec0.B[ui8[5:4]]
VR[vd].B[4i+3] = vec0.B[ui8[7:6]]
【0090】
ui8[1:0]、ui8[3:2]、ui8[5:4]、ui8[7:6]はいずれも、即値であり、中間ベクトルに対応するインデックス値を表し、具体的には、即値ui8の最下位2ビット(ui8[1:0])は1番目のターゲット要素の中間ベクトルにおけるインデックスを表し、即値ui8の第3ビットと第4ビット(ui8[3:2])は2番目のターゲット要素の中間ベクトルにおけるインデックスを表し、即値ui8の第5ビットと第6ビット(ui8[5:4])は3番目のターゲット要素の中間ベクトルにおけるインデックスを表し、即値ui8の第7ビットと第8ビット(ui8[7:6])は4番目のターゲット要素の中間ベクトルにおけるインデックスを表す。
【0091】
同様に、データタイプがハーフワードとワードである場合に、中間ベクトルとインデックスの方式は、上記の例と同じであり、オペコードの命令名称がXVS.{B/H/W}である場合に、2つの中間ベクトルに対してベクトルシャッフル操作を実装する必要がある。例示的に、第1のオペコードがXVS.Bである場合に、中間ベクトルは、次のように示されている。
vec0={VR[vj].B[4i+3],VR[vj].B[4i+2],VR[vj].B[4i+1],VR[vj].B[4i]}
vec1={VR[vj].B[4i+19],VR[vj].B[4i+18],VR[vj].B[4i+17],VR[vj].B[4i+16]}
【0092】
中間ベクトルはvec0とvec1であり、VR[vj].B[4i+3]、VR[vj].B[4i+2]、VR[vj].B[4i+1]、VR[vj].B[4i]は、中間ベクトルvec0の中間ベクトルパラメータで、VR[vj].B[4i+19]、VR[vj].B[4i+18]、VR[vj].B[4i+17]、VR[vj].B[4i+16]は、中間ベクトルvec1の中間ベクトルパラメータで、Bはデータタイプがバイトであることを示し、iは要素のレジスタにおける位置を示し、[4i+0]、[4i+1]、[4i+2]、[4i+3]は、レジスタの4つの連続する位置の要素を示し、[4i+16]、[4i+17]、[4i+18]、[4i+19]は、レジスタの4つの連続する位置の要素を示す。
【0093】
例示的に、第1のオペコードがXVS.Bであり、データタイプがバイトで、N1が4である場合に、ベクトルシャッフル命令「XVS.B vd,vj,ui8」は、ベクトルレジスタvjから、4つの隣接するバイト要素を読み取って1つのグループの要素を構成してシャッフルし、そして、得られた結果をベクトルレジスタvd内に書き込み、第1のオペコードがVS.Hであり、データタイプがハーフワードで、N1が4である場合に、ベクトルシャッフル命令「VS.H vd,vj,ui8」は、ベクトルレジスタvjから、4つの隣接するハーフワード要素を読み取り1つのグループの要素を構成してシャッフルし、そして、得られた結果をベクトルレジスタvd内に書き込み、第1のオペコードがVS.Wであり、データタイプがワードで、N1が4である場合に、ベクトルシャッフル命令「VS.W vd,vj,ui8」は、ベクトルレジスタvjから、4つの隣接するワード要素を読み取り1つのグループの要素を構成せいてシャッフルし、そして、得られた結果をベクトルレジスタvd内に書き込む。
【0094】
上述の例は、本願の実施例に係る技術的解決手段をよりよく理解するための単なる例であり、本願の実施例を一意に限定するものではないことを理解されたい。
【0095】
本願の実施例では、インデックス値及びオペコードを含むシャッフルパラメータをベクトルシャッフル命令に追加して、インデックス値及びオペコードに従い、ソース要素とインデックス値の数が異なる場合でのシャッフル操作を実装していることから、本願に係る技術的解決手段を採用すると、1つのベクトルシャッフル命令によって、ソース要素とインデックス値の数が異なる場合でのシャッフル操作を実装し、シャッフルモードを伝達するのに他の命令を追加する必要がなく、メモリにアクセスことによってシャッフルモードを取得する必要もなくなるため、システムオーバーヘッドを効果的に低下させ、ベクトルシャッフル操作の実行効率を向上させている。
【0096】
実施例3
【0097】
本願の1つの特定の実現形態では、前記オペコードは第2のオペコードで、且つ前記インデックス値の数と前記ソース要素の数が同じであり、
図3に示すように、ベクトルシャッフル命令の処理方式は、ステップ301~ステップ303を含む。
【0098】
ステップ301では、レジスタ識別子及びシャッフルパラメータを含む命令を受信する。
【0099】
本願の実施例では、命令の意味及び命令に含まれているパラメータは、実施例1と実施例2に記載されているものであり、ここで繰り返して説明しない。
【0100】
選択的には、ソースレジスタの数は2つあり、すなわち、ソース要素は2つの異なるレジスタに由来するものであり、前記ソースレジスタの数が複数である場合に、すべての前記ソースレジスタの各ソースレジスタ識別子はいずれも前記デスティネーションレジスタ識別子と異なるか、または、前記ソースレジスタの数が複数である場合に、すべての前記ソースレジスタには、前記デスティネーションレジスタ識別子と同じであるソースレジスタ識別子が1つ存在している。
【0101】
選択的には、シャッフルパラメータはインデックス値及びオペコードを含み、インデックス値は即値の形式で実装され、オペコードは、バイナリコードに転化可能な識別子の形式で実装され、且つオペコードは第2のオペコードである。例示的に、オペコードが第2のオペコードである場合に、ソースレジスタは第1のソースレジスタと第2のソースレジスタを含み、且つデスティネーションレジスタは第1のソースレジスタ又は第2のソースレジスタである。
【0102】
選択的には、命令のフォーマットは、「オペコード デスティネーションレジスタ,ソースレジスタ,即値」である。当該命令のフォーマットに従い、具体的に実装する際、命令は、「[X]VS.D vd,vj,ui8」と示すことができ、[X]VSは第2のオペコードの命令名称であり、Dは第2のオペコードのデータタイプで、Dはデータタイプがダブルワードであることを示し、[X]VS.Dは識別子形式の第2のオペコードであり、vdはデスティネーションレジスタを表し、vjとvdはソースレジスタを表し、ui8は即値を表す。例示的に、VS.Dは、VS.Dを01110011100111バイナリ形式に変換する第2のオペコードのようなバイナリ形式に転化可能な第2のオペコードである。また、即値は、1つのグループのデータであってもよく、インデックス値は、即値ui8の異なるビットであるui8[1:0]、ui8[3:2]、ui8[5:4]、ui8[7:6]で示され得る。
【0103】
ステップ302では、前記命令を実行して、前記オペコード及び前記インデックス値に従い、前記ソースレジスタにおいて、N2ビットごとのMN2個の要素から、各インデックス値によって指示されるソース要素をそれぞれ取得し、前記要素のデータタイプはダブルワードであり、N2ビットごとのMN2個の要素から選択されたソース要素の数はn2個であり、N2、MN2、及びn2はいずれも、0よりも大きい正の整数である。
【0104】
本願の実施例では、インデックス値の数とソース要素の数は同じであり、オペコードは第2のオペコードであり、N2ビットごとのMN2個の要素から、各インデックス値によって指示されるソース要素を取得し、要素のデータタイプはダブルワードであり、N2ビットごとのMN2個の要素から選択されたソース要素の数はn2個であり、N2、MN2、及びn2はいずれも0よりも大きい正の整数であるなどの条件を選択ルールとして決定する。
【0105】
選択的には、インデックス値はそれぞれ、各ソースレジスタ内の要素位置との間には所定の対応関係があり、当該要素位置は要素アドレスであってもよい。前記ソースレジスタにおいて、N2ビットごとのMN2個の要素から、各インデックス値によって指示されるソース要素をそれぞれ取得することは、すなわち、第1のソースレジスタにおいて、N2ビットごとのMN2個の要素から、各インデックス値によって指示される第1のソース要素をそれぞれ取得し、かつ、第2のソースレジスタにおいて、N2ビットごとのMN2個の要素から、各インデックス値によって指示される第2のソース要素をそれぞれ取得し、第1のソース要素と第2のソース要素を最終的に選択されたソース要素として決定することである。Mn2個の要素は、順次隣接する要素であってもよいし、交差して隣接する要素であってもよく、例えば、Mn2が4であり、ソースレジスタには、要素A1、要素A2、要素A3、要素A4、要素A5、要素A6、要素A7、要素A8という8つの要素がそれぞれ含まれていると想定すると、M
N4
個の要素は、要素A2~A5であってもよいし、要素A1、要素A3、要素A5、要素A7のような交差して隣接する要素であってもよい。
【0106】
例示的に、第2のオペランドが[X]VS.Dである場合に、N2は128であり、MN2は4で、n2は2である。
【0107】
具体的に実装する際、ソースレジスタの数は2つあり、すなわち第1のソースレジスタと第2のソースレジスタとなり、前記ソースレジスタにおいて、N2ビットごとのMN2個の要素から、各インデックス値によって指示されるソース要素をそれぞれ取得することは、第1のソースレジスタにおいて、N2ビットごとのMN2’個の要素から、第1のインデックス値(ui8[1:0]など)によって指示されるソース要素を取得すること、及び、第1のソースレジスタにおいて、N2ビットごとのMN2’個の要素から、第2のインデックス値(ui8[3:2]など)によって指示されるソース要素を取得することを含み、MN2’はMN2の半分であり、第1のソースレジスタから選択されたソース要素の数はn2/2あり、第2のソースレジスタから選択されたソース要素の数はn2/2ある。ソースレジスタの数が複数である場合に、各ソースレジスタは、即値の異なるビットに応じてベクトルシャッフルを行い、すなわち、異なるソースレジスタに対応する即値のビットは異なり、即値のどのビットに応じてインデックスするかは、具体的な状況に合わせて決定され、ここで繰り返して説明しない。
【0108】
ステップ303では、選択されたソース要素をターゲット要素として決定して、ターゲット要素を前記デスティネーションレジスタの前記インデックス値に対応する位置に書き込む。
【0109】
本願の実施例では、即値とデスティネーションレジスタ内のアドレスとの間には所定の対応関係がある。選択的には、ターゲット要素を前記デスティネーションレジスタの前記即値に対応する位置に書き込むことは、すなわち、デスティネーションレジスタから、即値に対応する位置を決定して、ソース要素を決定された位置に順次記憶することである。
【0110】
さらに、1つの実行可能な解決手段では、ステップ301とステップ302との間に、中間ベクトルを作成するステップを追加し、具体的には、決定された前記位置情報及びソース要素の数に従い、前記ソースレジスタからソース要素を選択する前、中間ベクトルを作成することができ、前記中間ベクトルは、少なくとも1つの中間ベクトルパラメータを含み、要素グループが存在している場合に、前記中間ベクトルパラメータの数は前記要素グループの数と等しいが、要素グループが存在していない場合に、前記中間ベクトルパラメータの数は前記ソース要素の数と等しい。作成された中間ベクトルに基づき、ステップ302の後、すなわち、前記ソースレジスタからソース要素を選択した後、前記選択された各ソース要素を前記中間ベクトルの対応する中間ベクトルパラメータにそれぞれ記憶し、前記中間ベクトルパラメータは選択されたソース要素と一対一に対応する関係があり、ステップ303は、すなわち、前記即値に応じて、各前記中間ベクトルパラメータのコンテンツを前記デスティネーションレジスタの対応する位置に書き込む。中間ベクトルを作成する方法は実施例2に係る方法と同じであるため、ここで繰り返して説明しない。
【0111】
選択的には、前記即値に応じて、各前記中間ベクトルパラメータのコンテンツを前記デスティネーションレジスタの対応する位置に書き込むことは、すなわち、各前記中間ベクトルパラメータに対して、当該中間ベクトルパラメータのコンテンツを、当該中間ベクトルパラメータに対応するインデックス値によって指示されるデスティネーションレジスタの位置に書き込むという操作を実行する。
【0112】
上記の中間ベクトルの解決手段に基づき、例示的に、第2のオペコードがVS.Dであり、命令のフォーマットがVS.D vd,vj,ui8で、vjとvdはソースレジスタである場合、vec0={VR[vj], VR[vd]}という中間ベクトルを作成し、各前記中間ベクトルパラメータのコンテンツを前記デスティネーションレジスタvdの対応する位置に書き込むことは、次のように示すことができる。
VR[vd].D[0] = vec0.D[ui8[1:0]]
VR[vd].D[1] = vec0.D[ui8[3:2]]
【0113】
ui8[1:0]、ui8[3:2]はいずれも、即値であり、レジスタに対応するインデックス値を表し、具体的には、即値ui8の最下位2ビット(ui8[1:0])は1番目のターゲット要素のソースレジスタにおけるインデックスを表し、即値ui8の第3ビットと第4ビット(ui8[3:2])は2番目のターゲット要素のソースレジスタにおけるインデックスを表す。
【0114】
第2のオペコードがXVS.Dである場合に、2つの中間ベクトルに対してベクトルシャッフル操作を実装する必要がある。例示的に、中間ベクトルは、次のように示されている。
vec0 = {XR[xj][127:0], XR[xd][127:0]}
vec1 = {XR[xj][255:128], XR[xd][255:128]}
【0115】
中間ベクトルは、vec0とvec1であり、XR[xj][127:0], XR[xd][127:0]は、vec0の中間ベクトルパラメータを表し、XR[xj][255:128], XR[xd][255:128]は、vec1の中間ベクトルパラメータを表し、Dは、データタイプがダブルワードであり、64ビットの幅を表す。
【0116】
例示的に、第2のオペコードがVS.Dであり、データタイプがダブルワードで、N2が128で、MN2が4で、n2が2である場合に、ベクトルシャッフル命令「VS.D vd,vj,ui8」は、ベクトルレジスタvjとベクトルレジスタvdに対して、各128ビットにおける4つのダブルワード要素から、即値のコンテンツに従って2つのダブルワード要素をそれぞれ選択し、得られた結果をベクトルレジスタvdに対応する128ビット内に書き込むことを示すが、第2のオペコードがXVS.Dであり、データタイプがダブルワードで、N2が128で、MN2が4で、n2が2である場合に、ベクトルシャッフル命令「XVS.D vd,vj,ui8」は、ベクトルレジスタxjとベクトルレジスタxdの各128ビットにおける4つのダブルワード要素から、即値のコンテンツに従って2つのダブルワード要素を読み取り、そして、読み取ったダブルワード要素をxdに対応する128ビット内に書き込むことを示す。
【0117】
本願の実施例では、2つのソースレジスタには、デスティネーションレジスタと同じソースレジスタが1つ存在しており、すなわち、ソースレジスタであると同時に、デスティネーションレジスタでもあるレジスタが1つ存在しており、上記の技術的解決手段を採用すると、シャッフル命令が実行されたたびに、デスティネーションレジスタにおける要素の半分をカバーすることができ、対応する操作の実行が必要とされるソフトウェアアプリケーションのシーンに適用され得る。
【0118】
本願の実施例では、インデックス値及びオペコードを含むシャッフルパラメータをベクトルシャッフル命令に追加して、インデックス値及びオペコードに従い、ソース要素とインデックス値の数が同じであり、且つデータタイプがダブルワードで、レジスタが128ビットである場合でのシャッフル操作を実装していることから、本願に係る技術的解決手段を採用すると、1つのベクトルシャッフル命令によって、ソース要素とインデックス値の数が異なり、且つデータタイプがダブルワードである場合でのシャッフル操作を実装し、シャッフルモードを伝達するのに他の命令を追加する必要がなく、メモリにアクセスことによってシャッフルモードを取得する必要もなくなるため、システムオーバーヘッドを効果的に低下させ、ベクトルシャッフル操作の実行効率を向上させている。
【0119】
実施例4
【0120】
本願の1つの特定の実現形態では、前記オペコードは第3のオペコードであり、前記インデックス値は、第1のインデックス値、第2のインデックス値、第3のインデックス値、及び第4のインデックス値を含み、前記第1のインデックス値、第2のインデックス値、第3のインデックス値、及び第4のインデックス値はそれぞれ、同じ又は異なる位置をインデックスしており、
図4に示すように、ベクトルシャッフル命令の処理方式は、ステップ401~ステップ405を含むことができる。
【0121】
ステップ401では、レジスタ識別子及びシャッフルパラメータを含む命令を受信する。
【0122】
本願の実施例では、命令の意味及び命令に含まれているパラメータは、実施例1、実施例2、及び実施例3に記載されているものであり、ここで繰り返して説明しない。
【0123】
選択的には、ソースレジスタの数は2つあり、すなわちソース要素は2つの異なるレジスタに由来するものであり、前記ソースレジスタの数が複数である場合に、すべての前記ソースレジスタの各ソースレジスタ識別子はいずれも前記デスティネーションレジスタ識別子と異なるか、または、前記ソースレジスタの数が複数である場合に、すべての前記ソースレジスタには、前記デスティネーションレジスタ識別子と同じであるソースレジスタ識別子が1つ存在している。
【0124】
選択的には、シャッフルパラメータはインデックス値及びオペコードを含み、インデックス値は即値の形式で実装され、オペコードは、バイナリコードに転化可能な識別子の形式で実装され、且つオペコードは第3のオペコードである。例示的に、オペコードが第3のオペコードである場合に、ソースレジスタは第1のソースレジスタと第2のソースレジスタを含み、且つデスティネーションレジスタは第1のソースレジスタ又は第2のソースレジスタである。
【0125】
選択的には、命令のフォーマットは「オペコード デスティネーションレジスタ,ソースレジスタ,即値」である。当該命令のフォーマットに従い、具体的に実装する際、命令は、「[X]VP.W vd/xd,vj/xj,ui8」と示すことができ、[X]VPは、第3のオペコードの命令名称であり、Wは第3のオペコードのデータタイプで、Wはデータタイプがワードであることを示し、[X]VP.Wは識別子形式の第3のオペコードを表し、vd/xdはデスティネーションレジスタを表し、vjとvdはソースレジスタを表し(またはxjとxdはソースレジスタを表す)、ui8は即値を表す。例示的に、VP.Wは、VP.Wを01110011111001バイナリ形式に変換する第3のオペコードのようなバイナリ形式に転化可能な第3のオペコードである。また、即値は1つのグループのデータであってもよく、インデックス値は、即値ui8の異なるビットであるui8[1:0]、ui8[3:2]、ui8[5:4]、ui8[7:6]で示され得る。
【0126】
ステップ402では、前記命令を実行して、前記オペコード及び前記インデックス値に従い、前記第1のソースレジスタにおいて、N3ビットごとのMN3個の要素から、第1のインデックス値と第2のインデックス値によって指示されるソース要素をそれぞれ取得し、前記第2のソースレジスタにおいて、N3ビットごとのMN3個の要素から、第3のインデックス値と第4のインデックス値によって指示されるソース要素をそれぞれ取得する。
【0127】
前記要素のデータタイプはワードであり、N3ビットごとのMN3個の要素から選択されたソース要素の数はn3個であり、N3、MN3、及びn3はいずれも0よりも大きい正の整数である。
【0128】
本願の実施例では、インデックス値は、それぞれ、第1のインデックス値、第2のインデックス値、第3のインデックス値、及び第4のインデックス値という4つのインデックス値を含み、第1のインデックス値、第2のインデックス値、第3のインデックス値、及び第4のインデックス値はそれぞれ、異なる位置をインデックスする。ソースレジスタの数が複数である場合に、各ソースレジスタは即値の異なるビットに応じてベクトルシャッフルを行い、すなわち異なるソースレジスタに対応する即値のビットは異なり、即値のどのビットに応じてインデックスするかは、具体的な状況に合わせて決定され、ここで繰り返して説明しない。例示的に、第3のオペコードが[X]VP.Wである場合に、第1のインデックス値はui8[1:0]であり、第2のインデックス値はui8[3:2]で、第3のインデックス値はui8[5:4]で、第4のインデックス値はui8[7:6]である。
【0129】
また、インデックス値の数とソース要素の数が同じであり、N3ビットごとのMN3個の要素から、各インデックス値によって指示されるソース要素を取得し、前記要素のデータタイプはワードであり、N3ビットごとのMN3個の要素から選択されたソース要素の数はn3個であり、N3、MN3、及びn3はいずれも0よりも大きい正の整数であるなどの条件を選択ルールとして決定する。M
N3
個の要素は、順次隣接する要素であってもよいし、交差して隣接する要素であってもよく、例えば、M
N3
が4であり、ソースレジスタには、要素A1、要素A2、要素A3、要素A4、要素A5、要素A6、要素A7、要素A8という8つの要素がそれぞれ含まれていると想定すると、M
N3
個の要素は、要素A2~A5であってもよいし、要素A1、要素A3、要素A5、要素A7のような交差して隣接する要素であってもよい。
【0130】
選択的には、インデックス値と各ソースレジスタ内の要素位置との間には所定の対応関係がそれぞれあり、当該要素位置は要素アドレスであってもよい。前記ソースレジスタにおいて、N3ビットごとのMN3個の要素から、各インデックス値によって指示されるソース要素をそれぞれ取得することは、すなわち、前記第1のソースレジスタにおいて、N3ビットごとのMN3個の要素から、第1のインデックス値と第2のインデックス値によって指示されるソース要素をそれぞれ取得すること、及び前記第2のソースレジスタにおいて、N3ビットごとのMN3個の要素から、第3のインデックス値と第4のインデックス値によって指示されるソース要素をそれぞれ取得することである。
【0131】
例示的に、第3のオペコードが[X]VP.Wである場合に、N3は128であり、MN3は4で、n3は2である。
【0132】
ソースレジスタにおいて、N3ビットごとのMN3個の要素から、各インデックス値によって指示されるソース要素をそれぞれ取得した後、ステップ403とステップ404を実行する。
【0133】
ステップ403では、前記第1のインデックス値よって指示されるソース要素を第1のターゲット要素として決定して、第2のインデックス値よって指示されるソース要素を第2のターゲット要素として決定する。
【0134】
本願の実施例では、第1のソースレジスタから選択された第1のインデックス値よって指示されるソース要素を第1のターゲット要素として決定して、第1のソースレジスタから選択された第2のインデックス値よって指示されるソース要素を第2のターゲット要素として決定する。
【0135】
ステップ404では、前記第3のインデックス値よって指示されるソース要素を第3のターゲット要素として決定して、第4のインデックス値よって指示されるソース要素を第4のターゲット要素として決定する。
【0136】
本願の実施例では、第2のソースレジスタから選択された第3のインデックス値よって指示されるソース要素を第3のターゲット要素として決定して、第2のソースレジスタから選択された第4のインデックス値よって指示されるソース要素を第4のターゲット要素として決定する。
【0137】
本願の実施例では、ステップ403とステップ404は、同時に実行されるステップであってもよいし、順番に実行されるステップであってもよく、実行順番は限定されない。ステップ403とステップ404をすべて実行完了した後、ステップ405を実行する。
【0138】
ステップ405では、前記第1のターゲット要素と前記第2のターゲット要素を前記デスティネーションレジスタの第1の位置に書き込むとともに、前記第3のターゲット要素と前記第4のターゲット要素を前記デスティネーションレジスタの第2の位置に書き込む。
【0139】
本願の実施例では、即値とデスティネーションレジスタ内のアドレスとの間には所定の対応関係がある。選択的には、ターゲット要素を前記デスティネーションレジスタの前記即値に対応する位置に書き込むことは、すなわち、デスティネーションレジスタから、即値に対応する位置を決定して、ソース要素を決定された位置に順次記憶することである。
【0140】
本願の実施例では、オペコードが第3のオペコードである場合に、第1のターゲット要素、第2のターゲット要素、第3のターゲット要素、及び第4のターゲット要素を取得した後、第1のターゲット要素と第2のターゲット要素をデスティネーションレジスタの第1の位置に書き込むとともに、第3のターゲット要素と第4のターゲット要素をデスティネーションレジスタの第2の位置に書き込むことができる。
【0141】
例示的に、第3のオペコードがVP.W/XVP.W(両者は[X]VP.Wとして簡略化される)であり、データタイプがワードで、N3が128で、MN3が4で、n3が2である場合に、ベクトルシャッフル命令「[X]VP.W vd,vj,ui8」は、ui8[1:0]とui8[3:2]の値をインデックス値として、ベクトルレジスタvj/xjの128ビットごとにおける4つのワード要素から、それぞれ2つの要素を選択して、ベクトルレジスタvd/xdに対応する128ビットの0番目と1番目のワード要素に書き込むこと、及びui8[5:4]とui8[7:6]の値をインデックス値として、ベクトルレジスタvd/xdの128ビットごとにおける4つのワード要素から、それぞれ2つの要素を選択して、ベクトルレジスタvd/xdに対応する128ビットの2番目と3番目のワード要素に書き込むことを示す。
【0142】
本願の実施例では、インデックス値及びオペコードを含むシャッフルパラメータをベクトルシャッフル命令に追加して、インデックス値及びオペコードに従って、ソース要素とインデックス値の数が同じであり、且つデータタイプがワードである場合でのシャッフル操作を実装していることから、本願に係る技術的解決手段を採用すると、1つのベクトルシャッフル命令によって、ソース要素とインデックス値の数が同じであり、且つデータタイプがワードである場合でのシャッフル操作を実装しており、シャッフルモードを伝達するのに他の命令を追加する必要がなく、メモリにアクセスことによってシャッフルモードを取得する必要もなくなるため、システムオーバーヘッドを効果的に低下させ、ベクトルシャッフル操作の実行効率を向上させている。
【0143】
実施例5
【0144】
本願の1つの特定の実現形態では、前記オペコードは第4のオペコードであり、且つ前記インデックス値の数と前記ソース要素の数が同じであり、
図5に示すように、ベクトルシャッフル命令の処理方式は、ステップ501~ステップ503を含むことができる。
【0145】
ステップ501では、レジスタ識別子及びシャッフルパラメータを含む命令を受信する。
【0146】
本願の実施例では、命令の意味及び命令に含まれているパラメータは、実施例1~実施例4に記載されているものであり、ここで繰り返して説明しない。
【0147】
選択的には、ソースレジスタの数は1つであり、すなわちソース要素は1つのレジスタに由来するものである。
【0148】
選択的には、シャッフルパラメータはインデックス値及びオペコードを含み、インデックス値は即値の形式で実装され、オペコードは、バイナリコードに転化可能な識別子の形式で実装され、且つオペコードは第4のオペコードである。
【0149】
選択的には、命令のフォーマットは「オペコード デスティネーションレジスタ,ソースレジスタ,即値」である。当該命令のフォーマットに従い、具体的に実装する際、命令は、XVP.D xd,xj,ui8と示すことができ、XVPは第4のオペコードの命令名称であり、Dは第4のオペコードのデータタイプで、Dはデータタイプがダブルワードであることを示し、XVP.Dは識別子形式の第4のオペコードであり、xdはデスティネーションレジスタを表し、xjはソースレジスタを表し、ui8は即値を表す。例示的に、XVP.Dは、XVP.Dを01110111111010バイナリ形式に変換する第4のオペコードのようなバイナリ形式に転化可能な第4のオペコードである。また、即値は1つのグループのデータであってもよく、インデックス値は、即値ui8の異なるビットであるui8[1:0]、ui8[3:2]、ui8[5:4]、ui8[7:6]で示され得る。
【0150】
ステップ502では、前記命令を実行して、前記オペコードと前記即値に従い、前記ソースレジスタにおいて、M
N4
個の要素から、各インデックス値によって指示されるソース要素をそれぞれ取得し、前記要素のデータタイプはダブルワードであり、選択されたソース要素の数はn4個であり、前記M
N4
とn4はいずれも0よりも大きい正の整数である。
【0151】
本願の実施例では、オペコードは第4のオペコードであり、第4のオペコードは、ソースレジスタからダブルワードのデータタイプの要素を取得することを指示するために使用され得る。インデックス値の数とソース要素の数が同じであり、M
N4
個の要素から、各インデックス値によって指示されるソース要素を取得し、前記要素のデータタイプはダブルワードであり、選択されたソース要素の数はn4個であり、前記M
N4
とn4はいずれも0よりも大きい正の整数であるなどの複数の条件を選択ルールとして決定する。M
N4
個の要素は、順次隣接する要素であってもよいし、交差して隣接する要素であってもよく、例えば、M
N4
が4であり、ソースレジスタには、要素A1、要素A2、要素A3、要素A4、要素A5、要素A6、要素A7、要素A8という8つの要素がそれぞれ含まれていると想定すると、M
N4
個の要素は、要素A2~A5であってもよいし、要素A1、要素A3、要素A5、要素A7のような交差して隣接する要素であってもよい。
【0152】
選択的には、インデックス値と各ソースレジスタ内の要素位置との間には所定の対応関係がそれぞれあり、当該要素位置は要素アドレスであってもよい。当該第4のオペコードとインデックス値に従って選択ルールを決定した後、ソースレジスタにおいて、M
N4
個の要素から、各インデックス値によって指示されるソース要素をそれぞれ取得することができ、取得されたソース要素のデータタイプはダブルワードであり、選択されたソース要素の数はn4個であり、M
N4
とn4はいずれも0よりも大きい正の整数である。
【0153】
例示的に、第4のオペコードがXVP.Dである場合に、M
N4
は4であり、n4は4である。
【0154】
ステップ503では、選択されたソース要素をターゲット要素として決定して、ターゲット要素を前記デスティネーションレジスタの前記インデックス値に対応する位置に書き込む。
【0155】
本願の実施例では、即値とデスティネーションレジスタ内のアドレスとの間には所定の対応関係がある。選択的には、ターゲット要素を前記デスティネーションレジスタの前記即値に対応する位置に書き込むことは、すなわち、デスティネーションレジスタから、即値に対応する位置を決定して、ソース要素を決定された位置に順次記憶することである。
【0156】
例示的に、第4のオペコードがXVP.Dであり、データタイプがダブルワードで、M
N4
が4で、n4が4である場合に、ベクトルシャッフル命令「XVP.D xd,xj,ui8」は、ui8[1:0]、ui8[3:2]、ui8[5:4]、ui8[7:6]の値をインデックス値として、ベクトルレジスタxjの4つのダブルワード要素から、各インデックス値によって指示されるソース要素を選択して、ソース要素をベクトルレジスタxdの4つのダブルワード要素に順次書き込むことを示す。
【0157】
本願の実施例では、インデックス値及びオペコードを含むシャッフルパラメータをベクトルシャッフル命令に追加して、インデックス値及びオペコードに従い、ソース要素とインデックス値の数が同じであり、且つデータタイプがダブルワードで、レジスタが256ビットである場合でのシャッフル操作を実装していることから、本願に係る技術的解決手段を採用すると、1つのベクトルシャッフル命令によって、ソース要素とインデックス値の数が同じであり、且つデータタイプがダブルワードで、レジスタが256ビットである場合でのシャッフル操作を実装しており、シャッフルモードを伝達するのに他の命令を追加する必要がなく、メモリにアクセスことによってシャッフルモードを取得する必要もなくなるため、システムオーバーヘッドを効果的に低下させ、ベクトルシャッフル操作の実行効率を向上させている。
【0158】
実施例6
【0159】
本願の1つの特定の実現形態では、前記オペコードは第5のオペコードであり、前記インデックス値は第1のインデックス値と第3のインデックス値を含み、前記第1のインデックス値と第3のインデックス値はそれぞれ、異なる位置をインデックスし、前記ソースレジスタは第1のソースレジスタと第2のソースレジスタを含み、
図6に示すように、ベクトルシャッフル命令の処理方式は、ステップ601~ステップ603を含むことができる。
【0160】
ステップ601では、レジスタ識別子及びシャッフルパラメータを含む命令を受信する。
【0161】
本願の実施例では、命令の意味及び命令に含まれているパラメータは、実施例1~実施例5に記載されているものであり、ここで繰り返して説明しない。
【0162】
選択的には、ソースレジスタの数は2つあり、すなわちソース要素は2つの異なるレジスタに由来するものであり、前記ソースレジスタの数が複数である場合に、すべての前記ソースレジスタの各ソースレジスタ識別子はいずれも、前記デスティネーションレジスタ識別子と異なるか、または、前記ソースレジスタの数が複数である場合に、すべての前記ソースレジスタには、前記デスティネーションレジスタ識別子と同じであるソースレジスタ識別子が1つ存在している。
【0163】
選択的には、シャッフルパラメータはインデックス値及びオペコードを含み、インデックス値は即値の形式で実装され、オペコードは、バイナリコードに転化可能な識別子の形式で実装され、且つオペコードは第5のオペコードである。例示的に、オペコードが第5のオペコードである場合に、ソースレジスタは第1のソースレジスタと第2のソースレジスタを含み、且つデスティネーションレジスタは第1のソースレジスタ又は第2のソースレジスタである。
【0164】
選択的には、命令のフォーマットは、「オペコード デスティネーションレジスタ,ソースレジスタ,即値」である。当該命令のフォーマットに従い、具体的に実装する際、命令は、XVP.Q vd/xd,vj/xj,ui8と示すことができ、XVPは第5のオペコードの命令名称であり、Qは第5のオペコードのデータタイプで、Qはデータタイプが4ワードであることを示し、XVP.Qは識別子形式の第5のオペコードであり、xdはデスティネーションレジスタを表し、xjとxdはソースレジスタを表し、ui8は即値を表す。例示的に、XVP.Qは、XVP.Qを01110111111011バイナリ形式に変換する第5のオペコードのようなバイナリ形式に転化可能な第5のオペコードである。また、即値は1つのグループのデータであってもよく、インデックス値は、即値ui8の異なるビットであるui8[1:0]、ui8[5:4]で示され得る。
【0165】
ステップ602では、前記命令を実行して、前記オペコードと前記即値に従い、前記第1のソースレジスタにおいて、M
N5
個の要素から、第1のインデックス値によって指示される第1のソース要素を取得し、前記第2のソースレジスタにおいて、M
N5
個の要素から、第3のインデックス値によって指示される第2のソース要素を取得し、前記要素のデータタイプは4ワードであり、選択されたソース要素の数はn5個であり、n5は0よりも大きい正の整数である。
【0166】
本願の実施例では、オペコードは第5のオペコードであってもよく、当該第5のオペコードは、ソースレジスタから、データタイプが4ワードの要素を取得することを指示するために使用され得る。インデックス値は、第1のインデックス値と第3のインデックス値という2つのインデックス値を含み、第1のインデックス値と第3のインデックス値はそれぞれ、異なる位置をインデックスし、第1のインデックス値と第3のインデックス値はそれぞれ、同一の即値の異なるビットを表し、例えば、第1のインデックス値は即値ui8の下位ビットを表し、第3のインデックス値は即値ui8の上位ビットを表し、また、第1のインデックス値はさらに、即値ui8の最下位2ビットを表し、第3のインデックス値は、さらに即値ui8の次に最下位2ビットを表すことができる。例示的に、第5のオペコードがXVP.Qである場合に、第1のインデックス値はui8[1:0]であり、第3のインデックス値はui8[5:4]である。ソースレジスタの数が複数である場合に、各ソースレジスタは即値の異なるビットに応じてベクトルシャッフルを行い、すなわち異なるソースレジスタに対応する即値のビットは異なり、即値のどのビットに応じてインデックスするかは、具体的な状況に合わせて決定され、ここで繰り返して説明しない。
【0167】
また、インデックス値の数とソース要素の数が同じであり、前記第1のソースレジスタにおいて、M
N5
個の要素から、第1のインデックス値によって指示される第1のソース要素を取得し、前記第2のソースレジスタにおいて、M
N5
個の要素から、第3のインデックス値によって指示される第2のソース要素を取得し、前記要素のデータタイプは4ワードであり、選択されたソース要素の数はn5個であり、n5は0よりも大きい正の整数であるなどの複数の条件を選択ルールとして決定する。M
N5
個の要素は、順次隣接する要素であってもよいし、交差して隣接する要素であってもよく、例えば、M
N5
が4であり、ソースレジスタには、要素A1、要素A2、要素A3、要素A4、要素A5、要素A6、要素A7、要素A8という8つの要素がそれぞれ含まれていると想定すると、M
N5
個の要素は、要素A2~A5であってもよいし、要素A1、要素A3、要素A5、要素A7のような交差して隣接する要素であってもよい。
【0168】
選択的には、インデックス値と各ソースレジスタ内の要素位置との間には所定の対応関係がそれぞれあり、当該要素位置は要素アドレスであってもよい。第5のオペコードとインデックス値に従って選択ルールを決定した後、第1のソースレジスタにおいて、M
N5
個の要素から、第1のインデックス値によって指示される第1のソース要素を取得し、第2のソースレジスタにおいて、M
N5
個の要素から、第2のインデックス値によって指示される第2のソース要素を取得することができる。第1のソースレジスタから選択されたソース要素の数はn5/2あり、第2のソースレジスタから選択されたソース要素の数はn5/2ある。ソースレジスタの数が複数である場合に、各ソースレジスタは即値の異なるビットに応じてベクトルシャッフルを行い、すなわち異なるソースレジスタに対応する即値のビットは異なり、即値のどのビットに応じてインデックスするかは、具体的な状況に合わせて決定され、ここで繰り返して説明しない。
【0169】
例示的に、第5のオペコードがXVP.Qである場合に、MN5は2であり、n5は2である。
【0170】
第1のソース要素と第2のソース要素を取得した後、ステップ603を実行する。
【0171】
ステップ603では、第1のソース要素と第2のソース要素をそれぞれターゲット要素として決定して、前記デスティネーションレジスタの対応する位置に書き込む。
【0172】
本願の実施例では、即値とデスティネーションレジスタ内のアドレスとの間には所定の対応関係がある。選択的には、ターゲット要素を前記デスティネーションレジスタの前記即値に対応する位置に書き込むことは、すなわち、デスティネーションレジスタから、即値に対応する位置を決定して、ソース要素を決定された位置に順次記憶することである。
【0173】
本願の実施例では、オペコードが第5のオペコードである場合に、第1のソース要素と第2のソース要素を取得した後、第1のソース要素をターゲット要素として決定してデスティネーションレジスタの第1の位置に書き込み、第2のソース要素をターゲット要素として決定してデスティネーションレジスタの第2の位置に書き込むことができる。第1の位置と第2の位置はそれぞれインデックス値によって決定される。
【0174】
例示的に、第5のオペコードがXVP.Qであり、データタイプが4ワードで、MN5が2で、n5が2である場合に、ベクトルシャッフル命令「XVP.Q xd,xj,ui8」は、ui8[1:0]、ui8[5:4]の値に従い、ベクトルレジスタxjの2つの4ワード要素から1つのソース要素を選択して、ベクトルレジスタxdの2つの4ワード要素から1つのソース要素を選択して、選択された2つのソース要素をインデックス値に従ってベクトルレジスタxdの2つの4ワード要素に書き込むことを示す。
【0175】
本願の実施例では、インデックス値及びオペコードを含むシャッフルパラメータをベクトルシャッフル命令に追加して、インデックス値及びオペコードに従い、ソース要素とインデックス値の数が同じであり、且つデータタイプが4ワードである場合でのシャッフル操作を実装していることから、本願に係る技術的解決手段を採用すると、1つのベクトルシャッフル命令によって、ソース要素とインデックス値の数が同じであり、且つデータタイプが4ワードである場合でのシャッフル操作を実装しており、シャッフルモードを伝達するのに他の命令を追加する必要がなく、メモリにアクセスことによってシャッフルモードを取得する必要もなくなるため、システムオーバーヘッドを効果的に低下させ、ベクトルシャッフル操作の実行効率を向上させている。
【0176】
実施例7
【0177】
図7を参照すると、
図7は、本願の実施例により提供されるプロセッサの構造概略図を示している。
【0178】
図7に示すように、当該プロセッサは、
データ要素を記憶するためのソースレジスタ72及びターゲットレジスタ74を含む複数のベクトルレジスタと、
ソースレジスタ識別子及びデスティネーションレジスタ識別子を含むレジスタ識別子、及びシャッフルパラメータを含むベクトルシャッフル命令を復号化するための復号化ユニット71と、
前記ベクトルシャッフル命令に応答し、前記シャッフルパラメータに従って前記ソースレジスタ
72から取得されたソース要素に対してベクトルシャッフル操作を実行するとともに、前記ベクトルシャッフル操作
を行った後のターゲット要素を取得して、前記ターゲット要素を前記デスティネーションレジスタ74に書き込む実行ユニット73と、を含むことができる。
【0179】
選択的には、命令は命令メモリ70に記憶されている。
【0180】
選択的には、前記実行ユニット73は、前記シャッフルパラメータに従い、前記ソース要素の前記ソースレジスタ72における位置情報及びソース要素の数を決定し、選択された前記ソース要素の数は1つ又は複数であり、決定された前記位置情報及びソース要素の数に従い、前記ソースレジスタからソース要素を選択し、すべての前記選択されたソース要素をターゲット要素として決定する。
【0181】
選択的には、前記シャッフルパラメータはインデックス値及びオペコードを含み、前記インデックス値は、ベクトルシャッフル操作に必要な各ソース要素の前記ソースレジスタにおける位置情報を指示するためのものであり、前記オペコードは、前記ソースレジスタとデスティネーションレジスタに対する操作を示すためのものであり、
前記実行ユニット73は、前記インデックス値及び前記オペコードに従い、ソース要素を取得する選択ルールを決定し、ソースレジスタ72から、前記選択ルールに遵い、各インデックス値によって指示されるソース要素をそれぞれ取得する。
【0182】
選択的には、前記実行ユニット73は、前記インデックス値の数と前記ソース要素の数が異なる場合に、前記インデックス値の数に従い、前記ソース要素のグループ化方式を決定して、前記グループ化方式及び前記オペコードに従い、前記選択ルールを決定し、前記インデックス値の数と前記ソース要素の数が同じである場合に、前記オペコードに従い、前記選択ルールを決定する。
【0183】
選択的には、前記実行ユニット73は、前記ソースレジスタ内の隣接する要素をN1個ごとに1つのグループの要素グループとして構成し、前記要素のデータタイプは、バイト、ハーフワード、ワードのいずれか1つであり、N1は0よりも大きい正の整数であり、各要素グループにおける要素を初期ソース要素として決定し、前記初期ソース要素から、各インデックス値によって指示されるソース要素をそれぞれ取得し、各前記要素グループから選択されたソース要素の数はn1個である。
【0184】
選択的には、前記隣接する要素は、前記ソースレジスタにおいて位置が順次隣接する要素であり、隣接する複数の要素グループにおける要素アドレスは、部分的に同じまたは完全に異なることがあり、
各要素グループに含まれている要素のデータタイプは同じであり、異なる要素グループに含まれている要素のデータタイプは同じ又は異なる。
【0185】
選択的には、前記オペコードは第2のオペコードであり、且つ前記インデックス値の数と前記ソース要素の数は同じであり、
前記実行ユニット73は、前記ソースレジスタにおいて、N2ビットごとのMN2個の要素から、各インデックス値によって指示されるソース要素をそれぞれ取得し、前記要素のデータタイプはダブルワードであり、N2ビットごとのMN2個の要素から選択されたソース要素の数はn2個であり、N2、MN2、及びn2はいずれも0よりも大きい正の整数である。
【0186】
選択的には、前記実行ユニット73は、中間ベクトルを作成し、前記中間ベクトルは、少なくとも1つの中間ベクトルパラメータを含み、要素グループが存在している場合に、前記中間ベクトルパラメータの数は前記要素グループの数と等しいが、要素グループが存在していない場合に、前記中間ベクトルパラメータの数は前記ソース要素の数と等しく、前記選択された各ソース要素を前記中間ベクトルの対応する中間ベクトルパラメータにそれぞれ記憶し、前記中間ベクトルパラメータは選択されたソース要素と一対一に対応する関係があり、前記シャッフルパラメータに従い、各前記中間ベクトルパラメータのコンテンツを前記デスティネーションレジスタの対応する位置に書き込む。
【0187】
選択的には、前記オペコードは第3のオペコードであり、前記インデックス値は、第1のインデックス値、第2のインデックス値、第3のインデックス値、及び第4のインデックス値を含み、前記第1のインデックス値、第2のインデックス値、第3のインデックス値、及び第4のインデックス値はそれぞれ、異なる位置をインデックスし、前記ソースレジスタは第1のソースレジスタと第2のソースレジスタを含み、
前記実行ユニット73は、前記ソースレジスタ72において、N3ビットごとのMN3個の要素から、第1のインデックス値と第2のインデックス値によって指示されるソース要素をそれぞれ取得し、前記第2のソースレジスタにおいて、N3ビットごとのMN3個の要素から、第3のインデックス値と第4のインデックス値によって指示されるソース要素をそれぞれ取得し、前記要素のデータタイプはワードであり、N3ビットごとのMN3個の要素から選択されたソース要素の数はn3個であり、N3、MN3、及びn3はいずれも0よりも大きい正の整数であり、前記第1のインデックス値よって指示されるソース要素を第1のターゲット要素として決定して、第2のインデックス値よって指示されるソース要素を第2のターゲット要素として決定し、前記第3のインデックス値よって指示されるソース要素を第3のターゲット要素として決定して、第4のインデックス値よって指示されるソース要素を第4のターゲット要素として決定し、前記第1のターゲット要素と前記第2のターゲット要素を前記デスティネーションレジスタの第1の位置に書き込むとともに、前記第3のターゲット要素と前記第4のターゲット要素を前記デスティネーションレジスタの第2の位置に書き込む。
【0188】
選択的には、前記オペコードは第4のオペコードであり、
前記実行ユニット73は、前記ソースレジスタにおいて、M
N4
個の要素から、各インデックス値によって指示されるソース要素をそれぞれ取得し、前記要素のデータタイプはダブルワードであり、選択されたソース要素の数はn4個であり、前記M
N4
とn4はいずれも0よりも大きい正の整数である。
【0189】
選択的には、前記オペコードは第5のオペコードであり、前記インデックス値は第1のインデックス値と第3のインデックス値を含み、前記第1のインデックス値と第3のインデックス値はそれぞれ、異なる位置をインデックスし、前記ソースレジスタは第1のソースレジスタと第2のソースレジスタを含み、
前記実行ユニット73は、前記第1のソースレジスタにおいて、M
N5
個の要素から、第1のインデックス値によって指示される第1のソース要素を取得し、前記第1のソースレジスタにおいて、M
N5
個の要素から、第3のインデックス値によって指示される第2のソース要素を取得し、前記要素のデータタイプは4ワードであり、選択されたソース要素の数はn5個であり、n5は0よりも大きい正の整数であり、第1のソース要素と第2のソース要素をそれぞれターゲット要素として決定して、前記デスティネーションレジスタの対応する位置に書き込む。
【0190】
選択的には、前記ソースレジスタの数は1つ又は複数であり、前記デスティネーションレジスタの数は1であり、
前記ソースレジスタの数が1つである場合に、前記ソースレジスタ識別子と前記デスティネーションレジスタ識別子は同じ又は異なるものであってもよく、
前記ソースレジスタの数が複数である場合に、すべての前記ソースレジスタの各ソースレジスタ識別子はいずれも前記デスティネーションレジスタ識別子と異なるか、または、前記ソースレジスタの数が複数である場合に、すべての前記ソースレジスタには、前記デスティネーションレジスタ識別子と同じであるソースレジスタ識別子が1つ存在している。
【0191】
本願の実施例により提供されるプロセッサは、レジスタ識別子及びシャッフルパラメータを命令に追加し、シャッフルパラメータを用いて、ソースレジスタから取得された要素に対してベクトルシャッフル操作を実行することができるため、特定の機能を実現するために複数の命令によってシャッフル操作を実行する必要がなく、特定の機能のベクトルシャッフル操作を1つの命令によって実現することができ、特定の機能の実行効率を向上させる。
【0192】
実施例8
【0193】
図8に示すように、電子機器は、処理アセンブリ802、メモリ804、電源アセンブリ806、マルチメディアアセンブリ808、オーディオアセンブリ810、入力/出力(I/O)用インタフェース812、センサアセンブリ814、及び通信アセンブリ816のうちの1つ又は複数のアセンブリを含むことができる。
【0194】
処理アセンブリ802は、一般に、表示、データ通信、カメラ動作、及び記録動作に関連する動作など、電子機器の全体的な動作を制御する。処理アセンブリ802は、上述した方法のステップのすべて又は一部を完了させるために、命令を処理する1つ又は複数のプロセッサ820を含むことができる。また、処理アセンブリ802は、処理アセンブリ802と他のアセンブリとの間の相互作用を容易にするための1つ又は複数のモジュールを含むことができる。例えば、処理アセンブリ802は、マルチメディアアセンブリ808と処理アセンブリ802との間の相互作用を容易にするためのマルチメディアモジュールを含むことができる。
【0195】
メモリ804は、電子機器での操作をサポートするための様々なタイプのデータを記憶するように構成されている。このようなデータの例としては、電子機器上で操作される任意のアプリケーション又は方法の命令、連絡先データ、電話帳データ、メッセージ、画像、ビデオなどがある。メモリ804は、スタティックランダムアクセスメモリ(SRAM)、電気的に消去可能なプログラマブル読み取り専用メモリ(EEPROM)、消去可能なプログラマブル読み取り専用メモリ(EPROM)、プログラマブル読み取り専用メモリ(PROM)、読み取り専用メモリ(ROM)、磁気メモリ、フラッシュメモリ、磁気ディスク、または光ディスクのような任意のタイプの揮発性又は不揮発性記憶機器、またはそれらの組み合わせによって実装され得る。
【0196】
電源アセンブリ806は、電子機器の様々なアセンブリに電力を供給する。電源アセンブリ806は、電源管理システム、1つ又は複数の電源、及び端末800に供する電力の生成、管理、及び配電に関連するその他のアセンブリを含むことができる。
【0197】
マルチメディアアセンブリ808は、前記電子機器とユーザとの間の出力インタフェースを提供するスクリーンを含む。いくつかの実施例では、スクリーンは、液晶ディスプレイ(LCD)及びタッチパネル(TP)を含み得る。スクリーンがタッチパネルを含む場合、スクリーンはユーザからの入力信号を受信するためのタッチスクリーンとして実装され得る。タッチパネルは、タッチ、スワイプ、及びタッチパネル上でのジェスチャーを感知するための1つ又は複数のタッチセンサを含む。前記タッチセンサは、タッチ又はスワイプ操作の境界を感知するだけでなく、前記タッチ又はスワイプ操作に関連する持続時間及び圧力を検出することもできる。いくつかの実施例では、マルチメディアアセンブリ808は、1つのフロントカメラ及び/又はリアカメラを含む。フロントカメラ及び/又はリアカメラは、電子機器が撮影モード又はビデオモードなどの動作モードにあるときに、外部マルチメディアデータを受信することができる。各フロントカメラ及びリアカメラは、固定式光学レンズシステムであってもよいし、焦点距離及び光学ズーム機能を有するものであってもよい。
【0198】
オーディオアセンブリ810は、オーディオ信号を出力及び/又は入力するように構成されている。例えば、オーディオアセンブリ810は、端末が通話モード、録音モード、音声認識モードなどの動作モードにあるときに、外部オーディオ信号を受信するように構成されているマイクロフォン(MIC)を含む。受信されたオーディオ信号は、さらに、メモリ804に記憶されるか、通信アセンブリ816によって送信され得る。いくつかの実施例では、オーディオアセンブリ810は、オーディオ信号を出力するためのスピーカをさらに含む。
【0199】
I/Oインタフェース812は、処理アセンブリ802と周辺インタフェースモジュールとの間のインタフェースを提供し、上記の周辺インタフェースモジュールは、キーパッド、クリックホイール、ボタンなどであってもよい。これらのボタンは、ホームボタン、音量ボタン、スタートボタン、ロックボタンを含むことができるが、これらに限定されない。
【0200】
センサアセンブリ814は、電子機器800の状態の様々な側面の評価を提供するための1つ又は複数のセンサを含む。例えば、センサアセンブリ814は、電子機器800の開/閉状態、例えば前記アセンブリが端末のディスプレイ及びキーパッドであるようなアセンブリの相対的位置決めを検出することができ、センサアセンブリ814はまた、端末又は端末の1つのアセンブリの位置の変化、電子機器に対するユーザの接触の有無、電子機器の向き又は加速/減速、及び電子機器の温度の変化を検出することができる。センサアセンブリ814は、物理的な接触が一切なくても近くの物体の存在を検出するように構成されている近接センサを含むことができる。センサアセンブリ814はまた、撮像用途に使用するためのCMOS又はCCDイメージセンサなどの光学センサを含み得る。いくつかの実施例では、当該センサアセンブリ814はさらに、加速度センサ、ジャイロスコープセンサ、磁気センサ、圧力センサ、または温度センサを含み得る。
【0201】
通信アセンブリ816は、電子機器と他のデバイスとの間の有線又は無線通信を容易にするように構成されている。電子機器は、WiFi、2G/3G/4G/5G、またはそれらの組み合わせなどの通信規格に基づく無線ネットワークにアクセスすることができる。1つの例示的な実施例では、通信コンポーネント816は、ブロードキャストチャネルを経由して、外部のブロードキャスト管理システムからのブロードキャスト信号又はブロードキャスト関連情報を受信する。1つの例示的な実施例では、前記通信コンポーネント816は、近距離通信を容易にするための近距離通信(NFC)モジュールをさらに備える。例えば、NFCモジュールは、無線周波数識別(RFID)技術、赤外線データ協会(IrDA)技術、ウルトラワイドバンド(UWB)技術、ブルートゥース(登録商標)(BT)技術、及び他の技術に基づいて実装することができる。
【0202】
例示的な実施例では、電子機器は、上記のベクトルのシャッフル方法を実行するために、1つ又は複数のアプリケーション特定用途向け集積回路(ASIC)、デジタル信号プロセッサ(DSP)、デジタル信号処理デバイス(DSPD)、プログラマブルロジックデバイス(PLD)、フィールドプログラマブルゲートアレイ(FPGA)、コントローラー、マイクロコントローラー、マイクロプロセッサ、または他の電子素子によって実装され得る。
【0203】
例示的な実施例では、命令を含むメモリ804などの、命令を含む非一時的なコンピュータ可読記憶媒体をさらに提供し、上記の命令は、上記のベクトルのシャッフル方法を達成するために電子機器のプロセッサ820によって実行可能である。例えば、前記非一時的なコンピュータ可読記憶媒体は、ROM、ランダムアクセスメモリ(RAM)、CD-ROM、磁気テープ、フロッピーディスク、光データ記憶装置などであってもよい。
【0204】
本願の実施例に係る電子機器は、前述した複数の方法の実施例における対応するベクトルのシャッフル方法を実装するためのものであり、且つ対応する方法の実施の有益な効果を有しているため、ここでは繰り返して説明しない。
【0205】
本明細書における各実施例は漸進的に説明され、各実施例は他の実施例との相違点に焦点を当て説明を進んでおり、各実施例同士の同じ又は類似する部分は互いに参照すればよい。装置の実施例については、基本的に方法の実施例と類似しているため、説明は比較的に簡単であり、関連している箇所は、方法の実施例を参照して説明すればよい。
【0206】
以上は、本願により提供されるベクトルのシャッフル方法、プロセッサ及び電子機器について詳細に説明した。本明細書において、本願発明の原理及び実施形態は、特定の例を適用して説明されているが、以上の実施例は、単に本願発明の方法及びその主要な構想を理解するのに役立つために説明されており、同時に、当業者であれば、本願発明の構想に基づき、特定の実施形態及びその適用範囲に変化を加えることができる。以上のように、本明細書の記載は本願発明を制限するためのものとして理解すべきではない。
【0207】
本明細書で提供されるアルゴリズムや表示は、特定のコンピュータ、電子システム、その他のデバイスと本質的に関連するものではない。様々な汎用システムも、本明細書に基づく教示と組み合わせて使用することができる。そのようなシステムを構築するために必要な構造は、上記の説明に照らして明らかである。さらに、本願は、特定のプログラミング言語を対象とするものではない。本明細書で説明されている本願の内容を実装するために、様々なプログラミング言語を利用することができ、特定の言語に関する上記の説明は、本願の最良の実施形態を開示するために提供されることを理解されたい。
【0208】
本願により提供される明細書において、大量の具体的な詳細が記載されている。しかしながら、本願の実施例は、これらの具体的な詳細がなくても実施可能であることが理解され得る。いくつかの実例では、本明細書の理解を不明瞭にしないように、公知の方法、構造及び技術は詳細に示されていない。
【0209】
同様に、本開示を簡潔にして、様々な発明の1つ又は複数の態様の理解に役立つようにするために、本願の例示的な実施例の上記の説明において、本願の様々な特徴は、単一の実施例、図面、またはそれらに関する説明にまとめられていることがあることが理解されるべきである。しかしながら、当該開示に係る方法は、特許を請求する本願が、各請求項に明示的に記載されている特徴よりも多くの特徴を必要とする意図を反映するものと解釈されるべきではない。より正確にいうと、以下の特許請求の範囲に反映されているように、本発明の態様は、先に開示された個々の実施例に係るすべての特徴よりも少ない数の特徴がある。したがって、特定の実施形態に従う特許請求の範囲は、それによってその特定の実施形態に明示的に組み込まれ、各請求項自体が本願の別個の実施例として機能する。
【0210】
当業者であれば、実施例におけるデバイス内のモジュールを適応的に変更し、当該実施例とは異なる1つ又は複数のデバイスに配置することが可能であることを理解することができる。実施例におけるモジュール又はユニット又はアセンブリを、単一のモジュール又はユニット又はアセンブリに組み合わせることが可能であり、さらに、複数のサブモジュール又はサブユニット又はサブアセンブリに分割することも可能である。このような特徴及び/又はプロセスもしくはユニットの少なくとも一部が相互に排他的である場合を除き、本明細書(添付の特許請求の範囲、要約及び添付図面を含む)に開示されたすべての特徴及びこのように開示された方法又はデバイスのすべてのプロセス又はユニットを、任意の組み合わせで組み合わせることができる。本明細書(添付の特許請求の範囲、要約、及び添付図面を含む)に開示された各特徴は、特に明記されていない限り、同一、等価、または類似する目的を提供する代替的な特徴によって置き換えられてもよい。
【0211】
加えて、当業者は、本明細書に記載されているいくつかの実施例は、その他の実施例に含まれているその他の特徴ではなくいくつかの特徴を含むが、異なる実施例の特徴の組み合わせは、本願の範囲内のものであり、異なる実施例を形成していることを意味することを理解することができる。例えば、以下の特許請求の範囲では、主張される実施例のいずれか1つは任意の組み合わせで使用され得る。
【0212】
本願の様々な構成要素の実施例は、ハードウェア、または1つ又は複数のプロセッサ上で実行されるソフトウェアモジュール、またはそれらの組み合わせで実装され得る。当業者は、マイクロプロセッサ又はデジタル信号プロセッサ(DSP)が、本願の実施例によるブラウザクライアントデバイスにおける構成要素の一部又はすべての機能の一部又はすべてを実装するために実際に使用され得ることを理解すべきである。また、本願は、本明細書に記載の方法の一部又は全部を実行するためのデバイス又は装置プログラム(例えば、コンピュータプログラム及びコンピュータプログラム製品)として実装され得る。本願を実装するこのようなプログラムは、コンピュータ可読媒体に格納されているものであってもよいし、1つ又は複数の信号の形態を有するものであってもよい。このような信号は、インターネットサイトからダウンロード可能であってもよいし、キャリア信号で提供されてもよいし、任意の他の形態で提供されてもよい。
【0213】
上記の実施例は、本願を説明するためのものであり、本願を限定するものではなく、当業者であれば、添付の特許請求の範囲から逸脱することなく、代替の実施例を設計することができることに留意されたい。特許請求の範囲において、括弧の間に位置する参照符号は、特許請求の範囲を限定するものとして解釈されるべきではない。用語「含む」は、特許請求の範囲に記載されていない素子又はステップの存在を排除しない。素子の前にある用語「一」又は「1つ」は、そのような素子が複数存在することを除外しない。本願は、いくつかの異なる素子を含むハードウェア、及び適切にプログラムされたコンピュータによって実装され得る。いくつかの装置を列挙している個別の請求項では、これらの装置のいくつかが、同一のハードウェアによって具現化され得る。第1、第2、第3といった用語の使用は、いかなる順序を示すものではない。これらの用語は名称として解釈されてもよい。
【0214】
本願は、2021年12月10日に中国国家知的産権局に提出された、出願番号が202111508098.8であり、発明の名称が「ベクトルのシャッフル方法、プロセッサ及び電子機器」である中国特許出願の優先権を主張しており、その内容の全ては、本願に参照によって取り込まれる。
【手続補正2】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項1】
レジスタ識別子及びシャッフルパラメータを含む命令を受信するステップであって、前記レジスタ識別子は、ソースレジスタ識別子及びデスティネーションレジスタ識別子を含み、前記ソースレジスタ識別子は、ソースレジスタを示すためのものであり、前記ソースレジスタは、ベクトルシャッフル操作実行時に操作されるソース要素を記憶するレジスタであり、前記デスティネーションレジスタ識別子は、デスティネーションレジスタを示すためのものであり、前記デスティネーションレジスタは、前記ベクトルシャッフル操作実行後に得られるターゲット要素を記憶するレジスタであり、前記シャッフルパラメータは、前記ソース要素に対するベクトルシャッフル操作の実行時に準拠するパラメータを指示するためのものである、ステップと、
前記命令を実行し、前記シャッフルパラメータ
に従い、ベクトルシャッフル操作に必要な前記ソース要素の前記ソースレジスタにおける位置情報及びソース要素の数を決定するステップであって、選択された前記ソース要素の数は1つ又は複数
であり、
前記シャッフルパラメータはインデックス値及びオペコードを含み、前記インデックス値は、ベクトルシャッフル操作に必要な各ソース要素の前記ソースレジスタにおける位置情報を指示するためのものであり、前記オペコードは、前記ソースレジスタとデスティネーションレジスタに対する操作を示すためのもので
ある、ステップと、
前記インデックス値の数と前記ソース要素の数が異なる場合に、前記インデックス値の数に従い、前記ソース要素のグループ化方式を決定して、前記グループ化方式及び前記オペコードに従い
、選択ルールを決定するステップと、
ソースレジスタから、前記選択ルールに遵い、各インデックス値によって指示されるソース要素をそれぞれ取得するステップと、
すべての選択された前記ソース要素をターゲット要素として決定するステップと、
前記ターゲット要素を前記デスティネーションレジスタに書き込むステップと、を含む、ベクトルのシャッフル方法。
【請求項2】
前記ベクトルのシャッフル方法は、
前記インデックス値の数と前記ソース要素の数が同じである場合に、前記オペコードに従い
、選択ルールを決定するステッ
プ、を
さらに含む、ことを特徴とする請求項
1に記載のベクトルのシャッフル方法。
【請求項3】
前記オペコードは第1のオペコードであり、且つ前記インデックス値の数と前記ソース要素の数は異なり、
ソースレジスタから、前記選択ルールに遵い、各インデックス値によって指示されるソース要素をそれぞれ取得するステップは、
前記ソースレジスタ内の隣接する要素をN1個ごとに1つのグループの要素グループとして構成するステップであって、前記要素のデータタイプは、バイト、ハーフワード、ワードのいずれか1つであり、N1は0よりも大きい正の整数である、ステップと、
各要素グループにおける要素を初期ソース要素として決定するステップと、
前記初期ソース要素から、各インデックス値によって指示されるソース要素をそれぞれ取得するステップであって、各前記要素グループから選択されたソース要素の数はn1個である、ステップと、を含む、ことを特徴とする請求項
2に記載のベクトルのシャッフル方法。
【請求項4】
前記隣接する要素は、前記ソースレジスタにおいて位置が順次隣接する要素であり、隣接する複数の要素グループにおける要素アドレスは、部分的に同じまたは完全に異なることがあり、
各要素グループに含まれている要素のデータタイプは同じであり、異なる要素グループに含まれている要素のデータタイプは同じ又は異なる、ことを特徴とする請求項
3に記載のベクトルのシャッフル方法。
【請求項5】
前記オペコードは第2のオペコードであり、且つ前記インデックス値の数と前記ソース要素の数は同じであり、
ソースレジスタから、前記選択ルールに遵い、各インデックス値によって指示されるソース要素をそれぞれ取得するステップは、
前記ソースレジスタにおいて、N2ビットごとのM
N2個の要素から、各インデックス値によって指示されるソース要素をそれぞれ取得するステップを含み、前記要素のデータタイプはダブルワードであり、N2ビットごとのM
N2個の要素から選択されたソース要素の数はn2個であり、N2、M
N2、及びn2はいずれも0よりも大きい正の整数である、ことを特徴とする請求項
2に記載のベクトルのシャッフル方法。
【請求項6】
前記
インデックス値の数に従い、前
記ソース要素
のグループ化方式を
決定するステップの前、
中間ベクトルを作成するステップをさらに含み、前記中間ベクトルは少なくとも1つの中間ベクトルパラメータを含み、要素グループが存在している場合に、前記中間ベクトルパラメータの数は前記要素グループの数と等しいが、要素グループが存在していない場合に、前記中間ベクトルパラメータの数は前記ソース要素の数と等しく、
ソースレジスタから
、前記選択ルールに遵い、各インデックス値によって指示されるソース要素を
それぞれ取得するステップは、
選択された
各ソース要素を前記中間ベクトルの対応する中間ベクトルパラメータにそれぞれ記憶するステップを含み、前記中間ベクトルパラメータは選択されたソース要素と一対一に対応する関係があり、
前記ターゲット要素を前記デスティネーションレジスタに書き込むステップは、
前記シャッフルパラメータに従い、各前記中間ベクトルパラメータのコンテンツを前記デスティネーションレジスタの対応する位置に書き込むステップを含む、ことを特徴とする請求項
3~5のいずれか1項に記載のベクトルのシャッフル方法。
【請求項7】
前記オペコードは第3のオペコードであり、前記インデックス値は、第1のインデックス値、第2のインデックス値、第3のインデックス値、及び第4のインデックス値を含み、前記第1のインデックス値、第2のインデックス値、第3のインデックス値、及び第4のインデックス値はそれぞれ、異なる位置をインデックスし、前記ソースレジスタは第1のソースレジスタと第2のソースレジスタを含み、
ソースレジスタから、前記選択ルールに遵い、各インデックス値によって指示されるソース要素をそれぞれ取得するステップは、
前記第1のソースレジスタにおいて、N3ビットごとのM
N3個の要素から、第1のインデックス値と第2のインデックス値によって指示されるソース要素をそれぞれ取得するステップと、
前記第2のソースレジスタにおいて、N3ビットごとのM
N3個の要素から、第3のインデックス値と第4のインデックス値によって指示されるソース要素をそれぞれ取得するステップであって、前記要素のデータタイプはワードであり、N3ビットごとのM
N3個の要素から選択されたソース要素の数はn3個であり、N3、M
N3、及びn3はいずれも0よりも大きい正の整数である、ステップと、を含み、
前記ターゲット要素を前記デスティネーションレジスタに書き込むステップは、
前記第1のインデックス値よって指示されるソース要素を第1のターゲット要素として決定して、第2のインデックス値よって指示されるソース要素を第2のターゲット要素として決定するステップと、
前記第3のインデックス値よって指示されるソース要素を第3のターゲット要素として決定して、第4のインデックス値よって指示されるソース要素を第4のターゲット要素として決定するステップと、
前記第1のターゲット要素と前記第2のターゲット要素を前記デスティネーションレジスタの第1の位置に書き込むとともに、前記第3のターゲット要素と前記第4のターゲット要素を前記デスティネーションレジスタの第2の位置に書き込むステップと、を含む、ことを特徴とする請求項
2に記載のベクトルのシャッフル方法。
【請求項8】
前記オペコードは第4のオペコードであり、
ソースレジスタから、前記選択ルールに遵い、各インデックス値によって指示されるソース要素をそれぞれ取得するステップは、
前記ソースレジスタにおいて、
M
N4
個の要素から、各インデックス値によって指示されるソース要素をそれぞれ取得するステップを含み、前記要素のデータタイプはダブルワードであり、選択されたソース要素の数はn4個であり、前記
M
N4
とn4はいずれも0よりも大きい正の整数である、ことを特徴とする請求項
2に記載のベクトルのシャッフル方法。
【請求項9】
前記オペコードは第5のオペコードであり、前記インデックス値は第1のインデックス値と第3のインデックス値を含み、前記第1のインデックス値と第3のインデックス値はそれぞれ、異なる位置をインデックスし、前記ソースレジスタは第1のソースレジスタと第2のソースレジスタを含み、
ソースレジスタから、前記選択ルールに遵い、各インデックス値によって指示されるソース要素をそれぞれ取得するステップは、
前記第1のソースレジスタにおいて、
M
N5
個の要素から、第1のインデックス値によって指示される第1のソース要素を取得するステップと、前記第2のソースレジスタにおいて、
M
N5
個の要素から、第3のインデックス値によって指示される第2のソース要素を取得するステップと、を含み、前記要素のデータタイプは4ワードであり、選択されたソース要素の数はn5個であり、n5は0よりも大きい正の整数であり、
前記ターゲット要素を前記デスティネーションレジスタに書き込むステップは、
第1のソース要素と第2のソース要素をそれぞれターゲット要素として決定して、前記デスティネーションレジスタの対応する位置に書き込むステップを含む、ことを特徴とする請求項
2に記載のベクトルのシャッフル方法。
【請求項10】
前記ソースレジスタの数は1つ又は複数であり、前記デスティネーションレジスタの数は1つであり、
前記ソースレジスタの数が1つである場合に、前記ソースレジスタ識別子は前記デスティネーションレジスタ識別子と異なり、
前記ソースレジスタの数が複数である場合に、すべての前記ソースレジスタの各ソースレジスタ識別子はいずれも前記デスティネーションレジスタ識別子と異なるか、または、前記ソースレジスタの数が複数である場合に、すべての前記ソースレジスタには、前記デスティネーションレジスタ識別子と同じであるソースレジスタ識別子が1つ存在している、ことを特徴とする請求項1~
5又は7~9のいずれか1項に記載のベクトルのシャッフル方法。
【請求項11】
データ要素を記憶するためのソースレジスタ、及びターゲットレジスタを含む複数のベクトルレジスタと、
ソースレジスタ識別子及びデスティネーションレジスタ識別子を含むレジスタ識別子、及びシャッフルパラメータを含むベクトルシャッフル命令を復号化するための復号化ユニットと、
前記ベクトルシャッフル命令に応答し、前記シャッフルパラメータに従って前記ソースレジスタから取得されたソース要素に対してベクトルシャッフル操作を実行するとともに、前記ベクトルシャッフル
操作を行った後のターゲット要素を取得して、前記ターゲット要素を前記デスティネーションレジスタに書き込む実行ユニットと、を
含み、
前記実行ユニットは、前記シャッフルパラメータに従い、前記ソース要素の前記ソースレジスタにおける位置情報及びソース要素の数を決定し、選択された前記ソース要素の数は1つ又は複数であり、決定された前記位置情報及びソース要素の数に従い、前記ソースレジスタからソース要素を選択し、すべての選択された前記ソース要素をターゲット要素として決定
し、
前記シャッフルパラメータはインデックス値及びオペコードを含み、前記インデックス値は、ベクトルシャッフル操作に必要な各ソース要素の前記ソースレジスタにおける位置情報を指示するためのものであり、前記オペコードは、前記ソースレジスタとデスティネーションレジスタに対する操作を示すためのものであり、
前記実行ユニットは、前記インデックス値及び前記オペコードに従い、ソース要素を取得する選択ルールを決定し、ソースレジスタから、前記選択ルールに遵い、各インデックス値によって指示されるソース要素をそれぞれ取得
し、
前記実行ユニットは、前記インデックス値の数と前記ソース要素の数が異なる場合に、前記インデックス値の数に従い、前記ソース要素のグループ化方式を決定して、前記グループ化方式及び前記オペコードに従い、前記選択ルールを決定
する、プロセッサ。
【請求項12】
前記実行ユニットは、前記インデックス値の数と前記ソース要素の数が同じである場合に、前記オペコードに従い、前記選択ルールを決定する、ことを特徴とする請求項11に記載のプロセッサ。
【請求項13】
前記オペコードは第1のオペコードであり、且つ前記インデックス値の数と前記ソース要素の数は異なり、
前記実行ユニットは、前記ソースレジスタ内の隣接する要素をN1個ごとに1つのグループの要素グループとして構成し、前記要素のデータタイプは、バイト、ハーフワード、ワードのいずれか1つであり、N1は0よりも大きい正の整数であり、各要素グループにおける要素を初期ソース要素として決定し、前記初期ソース要素から、各インデックス値によって指示されるソース要素をそれぞれ取得し、各前記要素グループから選択されたソース要素の数はn1個である、ことを特徴とする請求項
12に記載のプロセッサ。
【請求項14】
前記隣接する要素は、前記ソースレジスタにおいて位置が順次隣接する要素であり、隣接する複数の要素グループにおける要素アドレスは、部分的に同じまたは完全に異なることがあり、
各要素グループに含まれている要素のデータタイプは同じであり、異なる要素グループに含まれている要素のデータタイプは同じ又は異なる、ことを特徴とする請求項
13に記載のプロセッサ。
【請求項15】
前記オペコードは第2のオペコードであり、且つ前記インデックス値の数と前記ソース要素の数は同じであり、
前記実行ユニットは、前記ソースレジスタにおいて、N2ビットごとのM
N2個の要素から、各インデックス値によって指示されるソース要素をそれぞれ取得し、前記要素のデータタイプはダブルワードであり、N2ビットごとのM
N2個の要素から選択されたソース要素の数はn2個であり、N2、M
N2、及びn2はいずれも0よりも大きい正の整数である、ことを特徴とする請求項
12に記載のプロセッサ。
【請求項16】
前記実行ユニットは、中間ベクトルを作成し、前記中間ベクトルは、少なくとも1つの中間ベクトルパラメータを含み、要素グループが存在している場合に、前記中間ベクトルパラメータの数は前記要素グループの数と等しいが、要素グループが存在していない場合に、前記中間ベクトルパラメータの数は前記ソース要素の数と等しく、選択された各前記ソース要素を前記中間ベクトルの対応する中間ベクトルパラメータにそれぞれ記憶し、前記中間ベクトルパラメータは選択されたソース要素と一対一に対応する関係があり、前記シャッフルパラメータに従い、各前記中間ベクトルパラメータのコンテンツを前記デスティネーションレジスタの対応する位置に書き込む、ことを特徴とする請求項
13~15のいずれか1項に記載のプロセッサ。
【請求項17】
前記オペコードは第3のオペコードであり、前記インデックス値は、第1のインデックス値、第2のインデックス値、第3のインデックス値、及び第4のインデックス値を含み、前記第1のインデックス値、第2のインデックス値、第3のインデックス値、及び第4のインデックス値はそれぞれ、異なる位置をインデックスし、前記ソースレジスタは第1のソースレジスタと第2のソースレジスタを含み、
前記実行ユニットは、前記ソースレジスタにおいて、N3ビットごとのM
N3個の要素から、第1のインデックス値と第2のインデックス値によって指示されるソース要素をそれぞれ取得し、前記第2のソースレジスタにおいて、N3ビットごとのM
N3個の要素から、第3のインデックス値と第4のインデックス値によって指示されるソース要素をそれぞれ取得し、前記要素のデータタイプはワードであり、N3ビットごとのM
N3個の要素から選択されたソース要素の数はn3個であり、N3、M
N3、及びn3はいずれも0よりも大きい正の整数であり、前記実行ユニットは、前記第1のインデックス値よって指示されるソース要素を第1のターゲット要素として決定して、第2のインデックス値よって指示されるソース要素を第2のターゲット要素として決定し、前記第3のインデックス値よって指示されるソース要素を第3のターゲット要素として決定して、第4のインデックス値よって指示されるソース要素を第4のターゲット要素として決定し、前記第1のターゲット要素と前記第2のターゲット要素を前記デスティネーションレジスタの第1の位置に書き込むとともに、前記第3のターゲット要素と前記第4のターゲット要素を前記デスティネーションレジスタの第2の位置に書き込む、ことを特徴とする請求項
12に記載のプロセッサ。
【請求項18】
前記オペコードは第4のオペコードであり、
前記実行ユニットは、前記ソースレジスタにおいて、
M
N4
個の要素から、各インデックス値によって指示されるソース要素をそれぞれ取得し、前記要素のデータタイプはダブルワードであり、選択されたソース要素の数はn4個であり、前記
M
N4
とn4はいずれも0よりも大きい正の整数である、ことを特徴とする請求項
12に記載のプロセッサ。
【請求項19】
前記オペコードは第5のオペコードであり、前記インデックス値は第1のインデックス値と第3のインデックス値を含み、前記第1のインデックス値と第3のインデックス値はそれぞれ、異なる位置をインデックスし、前記ソースレジスタは第1のソースレジスタと第2のソースレジスタを含み、
前記実行ユニットは、前記第1のソースレジスタにおいて、
M
N5
個の要素から、第1のインデックス値によって指示される第1のソース要素を取得し、前記第1のソースレジスタにおいて、
M
N5
個の要素から、第3のインデックス値によって指示される第2のソース要素を取得し、前記要素のデータタイプは4ワードであり、選択されたソース要素の数はn5個であり、n5は0よりも大きい正の整数であり、第1のソース要素と第2のソース要素をそれぞれターゲット要素として決定して、前記デスティネーションレジスタの対応する位置に書き込む、ことを特徴とする請求項
12に記載のプロセッサ。
【請求項20】
前記ソースレジスタの数は1つ又は複数であり、前記デスティネーションレジスタの数は1つであり、
前記ソースレジスタの数が1つである場合に、前記ソースレジスタ識別子は前記デスティネーションレジスタ識別子と異なり、
前記ソースレジスタの数が複数である場合に、すべての前記ソースレジスタの各ソースレジスタ識別子はいずれも前記デスティネーションレジスタ識別子と異なるか、または、前記ソースレジスタの数が複数である場合に、すべての前記ソースレジスタには、前記デスティネーションレジスタ識別子と同じであるソースレジスタ識別子が1つ存在している、ことを特徴とする請求項
11~15又は17~19のいずれか1項に記載のプロセッサ。
【請求項21】
メモリ及び1つ以上のプログラムを含む電子機器であって、
前記1つ以上のプログラムは、
前記メモリに記憶されており、
前記電子機器は、1つ以上のプロセッサにより請求項1~
10のいずれか1
項に記載のベクトルのシャッフル方法を実行するように構成されている、ことを特徴とする電子機器。
【手続補正3】
【補正対象書類名】図面
【補正方法】変更
【補正の内容】
【手続補正4】
【補正対象書類名】図面
【補正方法】変更
【補正の内容】
【手続補正5】
【補正対象書類名】図面
【補正方法】変更
【補正の内容】
【手続補正6】
【補正対象書類名】図面
【補正方法】変更
【補正の内容】
【手続補正書】
【提出日】2024-07-29
【手続補正1】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項1】
レジスタ識別子及びシャッフルパラメータを含む命令を受信するステップであって、前記レジスタ識別子は、ソースレジスタ識別子及びデスティネーションレジスタ識別子を含み、前記ソースレジスタ識別子は、ソースレジスタを示すためのものであり、前記ソースレジスタは、ベクトルシャッフル操作実行時に操作されるソース要素を記憶するレジスタであり、前記デスティネーションレジスタ識別子は、デスティネーションレジスタを示すためのものであり、前記デスティネーションレジスタは、前記ベクトルシャッフル操作実行後に得られるターゲット要素を記憶するレジスタであり、前記シャッフルパラメータは、前記ソース要素に対するベクトルシャッフル操作の実行時に準拠するパラメータを指示するためのものである、ステップと、
前記命令を実行し、前記シャッフルパラメータに従い、ベクトルシャッフル操作に必要な前記ソース要素の前記ソースレジスタにおける位置情報及びソース要素の数を決定するステップであって、選択された前記ソース要素の数は1つ又は複数であり、前記シャッフルパラメータはインデックス値及びオペコードを含み、前記インデックス値は、ベクトルシャッフル操作に必要な各ソース要素の前記ソースレジスタにおける位置情報を指示するためのものであり、前記オペコードは、前記ソースレジスタとデスティネーションレジスタに対する操作を示すためのものである、ステップと、
前記インデックス値の数と前記ソース要素の数が異なる場合に、前記インデックス値の数に従い、前記ソース要素のグループ化方式を決定して、前記グループ化方式及び前記オペコードに従い、選択ルールを決定するステップと、
ソースレジスタから、前記選択ルールに遵い、各インデックス値によって指示されるソース要素をそれぞれ取得するステップと、
すべての選択された前記ソース要素をターゲット要素として決定するステップと、
前記ターゲット要素を前記デスティネーションレジスタに書き込むステップと、を含む、ベクトルのシャッフル方法。
【請求項2】
前記ベクトルのシャッフル方法は、
前記インデックス値の数と前記ソース要素の数が同じである場合に、前記オペコードに従い、選択ルールを決定するステップ、をさらに含む、ことを特徴とする請求項1に記載のベクトルのシャッフル方法。
【請求項3】
前記オペコードは第1のオペコードであり、且つ前記インデックス値の数と前記ソース要素の数は異なり、
ソースレジスタから、前記選択ルールに遵い、各インデックス値によって指示されるソース要素をそれぞれ取得するステップは、
前記ソースレジスタ内の隣接する要素をN1個ごとに1つのグループの要素グループとして構成するステップであって、前記要素のデータタイプは、バイト、ハーフワード、ワードのいずれか1つであり、N1は0よりも大きい正の整数である、ステップと、
各要素グループにおける要素を初期ソース要素として決定するステップと、
前記初期ソース要素から、各インデックス値によって指示されるソース要素をそれぞれ取得するステップであって、各前記要素グループから選択されたソース要素の数はn1個である、ステップと、を含む、ことを特徴とする請求項2に記載のベクトルのシャッフル方法。
【請求項4】
前記隣接する要素は、前記ソースレジスタにおいて位置が順次隣接する要素であり、隣接する複数の要素グループにおける要素アドレスは、部分的に同じまたは完全に異なることがあり、
各要素グループに含まれている要素のデータタイプは同じであり、異なる要素グループに含まれている要素のデータタイプは同じ又は異なる、ことを特徴とする請求項3に記載のベクトルのシャッフル方法。
【請求項5】
前記オペコードは第2のオペコードであり、且つ前記インデックス値の数と前記ソース要素の数は同じであり、
ソースレジスタから、前記選択ルールに遵い、各インデックス値によって指示されるソース要素をそれぞれ取得するステップは、
前記ソースレジスタにおいて、N2ビットごとのM
N2個の要素から、各インデックス値によって指示されるソース要素をそれぞれ取得するステップを含み、前記要素のデータタイプはダブルワードであり、N2ビットごとのM
N2個の要素から選択されたソース要素の数はn2個であり、N2、M
N2、及びn2はいずれも0よりも大きい正の整数である、ことを特徴とする請求項2に記載のベクトルのシャッフル方法。
【請求項6】
前記インデックス値の数に従い、前記ソース要素のグループ化方式を決定するステップの前、
中間ベクトルを作成するステップをさらに含み、前記中間ベクトルは少なくとも1つの中間ベクトルパラメータを含み、要素グループが存在している場合に、前記中間ベクトルパラメータの数は前記要素グループの数と等しいが、要素グループが存在していない場合に、前記中間ベクトルパラメータの数は前記ソース要素の数と等しく、
ソースレジスタから、前記選択ルールに遵い、各インデックス値によって指示されるソース要素をそれぞれ取得するステップは、
選択された各ソース要素を前記中間ベクトルの対応する中間ベクトルパラメータにそれぞれ記憶するステップを含み、前記中間ベクトルパラメータは選択されたソース要素と一対一に対応する関係があり、
前記ターゲット要素を前記デスティネーションレジスタに書き込むステップは、
前記シャッフルパラメータに従い、各前記中間ベクトルパラメータのコンテンツを前記デスティネーションレジスタの対応する位置に書き込むステップを含む、ことを特徴とする請求項3~5のいずれか1項に記載のベクトルのシャッフル方法。
【請求項7】
前記オペコードは第3のオペコードであり、前記インデックス値は、第1のインデックス値、第2のインデックス値、第3のインデックス値、及び第4のインデックス値を含み、前記第1のインデックス値、第2のインデックス値、第3のインデックス値、及び第4のインデックス値はそれぞれ、異なる位置をインデックスし、前記ソースレジスタは第1のソースレジスタと第2のソースレジスタを含み、
ソースレジスタから、前記選択ルールに遵い、各インデックス値によって指示されるソース要素をそれぞれ取得するステップは、
前記第1のソースレジスタにおいて、N3ビットごとのM
N3個の要素から、第1のインデックス値と第2のインデックス値によって指示されるソース要素をそれぞれ取得するステップと、
前記第2のソースレジスタにおいて、N3ビットごとのM
N3個の要素から、第3のインデックス値と第4のインデックス値によって指示されるソース要素をそれぞれ取得するステップであって、前記要素のデータタイプはワードであり、N3ビットごとのM
N3個の要素から選択されたソース要素の数はn3個であり、N3、M
N3、及びn3はいずれも0よりも大きい正の整数である、ステップと、を含み、
前記ターゲット要素を前記デスティネーションレジスタに書き込むステップは、
前記第1のインデックス値
によって指示されるソース要素を第1のターゲット要素として決定して、第2のインデックス値
によって指示されるソース要素を第2のターゲット要素として決定するステップと、
前記第3のインデックス値
によって指示されるソース要素を第3のターゲット要素として決定して、第4のインデックス値
によって指示されるソース要素を第4のターゲット要素として決定するステップと、
前記第1のターゲット要素と前記第2のターゲット要素を前記デスティネーションレジスタの第1の位置に書き込むとともに、前記第3のターゲット要素と前記第4のターゲット要素を前記デスティネーションレジスタの第2の位置に書き込むステップと、を含む、ことを特徴とする請求項2に記載のベクトルのシャッフル方法。
【請求項8】
前記オペコードは第4のオペコードであり、
ソースレジスタから、前記選択ルールに遵い、各インデックス値によって指示されるソース要素をそれぞれ取得するステップは、
前記ソースレジスタにおいて、M
N4個の要素から、各インデックス値によって指示されるソース要素をそれぞれ取得するステップを含み、前記要素のデータタイプはダブルワードであり、選択されたソース要素の数はn4個であり、前記M
N4とn4はいずれも0よりも大きい正の整数である、ことを特徴とする請求項2に記載のベクトルのシャッフル方法。
【請求項9】
前記オペコードは第5のオペコードであり、前記インデックス値は第1のインデックス値と第3のインデックス値を含み、前記第1のインデックス値と第3のインデックス値はそれぞれ、異なる位置をインデックスし、前記ソースレジスタは第1のソースレジスタと第2のソースレジスタを含み、
ソースレジスタから、前記選択ルールに遵い、各インデックス値によって指示されるソース要素をそれぞれ取得するステップは、
前記第1のソースレジスタにおいて、M
N5個の要素から、第1のインデックス値によって指示される第1のソース要素を取得するステップと、前記第2のソースレジスタにおいて、M
N5個の要素から、第3のインデックス値によって指示される第2のソース要素を取得するステップと、を含み、前記要素のデータタイプは4ワードであり、選択されたソース要素の数はn5個であり、n5は0よりも大きい正の整数であり、
前記ターゲット要素を前記デスティネーションレジスタに書き込むステップは、
第1のソース要素と第2のソース要素をそれぞれターゲット要素として決定して、前記デスティネーションレジスタの対応する位置に書き込むステップを含む、ことを特徴とする請求項2に記載のベクトルのシャッフル方法。
【請求項10】
前記ソースレジスタの数は1つ又は複数であり、前記デスティネーションレジスタの数は1つであり、
前記ソースレジスタの数が1つである場合に、前記ソースレジスタ識別子は前記デスティネーションレジスタ識別子と異なり、
前記ソースレジスタの数が複数である場合に、すべての前記ソースレジスタの各ソースレジスタ識別子はいずれも前記デスティネーションレジスタ識別子と異なるか、または、前記ソースレジスタの数が複数である場合に、すべての前記ソースレジスタには、前記デスティネーションレジスタ識別子と同じであるソースレジスタ識別子が1つ存在している、ことを特徴とする請求項1~5又は7~9のいずれか1項に記載のベクトルのシャッフル方法。
【請求項11】
データ要素を記憶するためのソースレジスタ、及びターゲットレジスタを含む複数のベクトルレジスタと、
ソースレジスタ識別子及びデスティネーションレジスタ識別子を含むレジスタ識別子、及びシャッフルパラメータを含むベクトルシャッフル命令を復号化するための復号化ユニットと、
前記ベクトルシャッフル命令に応答し、前記シャッフルパラメータに従って前記ソースレジスタから取得されたソース要素に対してベクトルシャッフル操作を実行するとともに、前記ベクトルシャッフル操作を行った後のターゲット要素を取得して、前記ターゲット要素を前記デスティネーションレジスタに書き込む実行ユニットと、を含み、
前記実行ユニットは、前記シャッフルパラメータに従い、前記ソース要素の前記ソースレジスタにおける位置情報及びソース要素の数を決定し、選択された前記ソース要素の数は1つ又は複数であり、決定された前記位置情報及びソース要素の数に従い、前記ソースレジスタからソース要素を選択し、すべての選択された前記ソース要素をターゲット要素として決定し、
前記シャッフルパラメータはインデックス値及びオペコードを含み、前記インデックス値は、ベクトルシャッフル操作に必要な各ソース要素の前記ソースレジスタにおける位置情報を指示するためのものであり、前記オペコードは、前記ソースレジスタとデスティネーションレジスタに対する操作を示すためのものであり、
前記実行ユニットは、前記インデックス値及び前記オペコードに従い、ソース要素を取得する選択ルールを決定し、ソースレジスタから、前記選択ルールに遵い、各インデックス値によって指示されるソース要素をそれぞれ取得し、
前記実行ユニットは、前記インデックス値の数と前記ソース要素の数が異なる場合に、前記インデックス値の数に従い、前記ソース要素のグループ化方式を決定して、前記グループ化方式及び前記オペコードに従い、前記選択ルールを決定する、プロセッサ。
【請求項12】
前記実行ユニットは、前記インデックス値の数と前記ソース要素の数が同じである場合に、前記オペコードに従い、前記選択ルールを決定する、ことを特徴とする請求項11に記載のプロセッサ。
【請求項13】
前記オペコードは第1のオペコードであり、且つ前記インデックス値の数と前記ソース要素の数は異なり、
前記実行ユニットは、前記ソースレジスタ内の隣接する要素をN1個ごとに1つのグループの要素グループとして構成し、前記要素のデータタイプは、バイト、ハーフワード、ワードのいずれか1つであり、N1は0よりも大きい正の整数であり、各要素グループにおける要素を初期ソース要素として決定し、前記初期ソース要素から、各インデックス値によって指示されるソース要素をそれぞれ取得し、各前記要素グループから選択されたソース要素の数はn1個である、ことを特徴とする請求項12に記載のプロセッサ。
【請求項14】
前記隣接する要素は、前記ソースレジスタにおいて位置が順次隣接する要素であり、隣接する複数の要素グループにおける要素アドレスは、部分的に同じまたは完全に異なることがあり、
各要素グループに含まれている要素のデータタイプは同じであり、異なる要素グループに含まれている要素のデータタイプは同じ又は異なる、ことを特徴とする請求項13に記載のプロセッサ。
【請求項15】
前記オペコードは第2のオペコードであり、且つ前記インデックス値の数と前記ソース要素の数は同じであり、
前記実行ユニットは、前記ソースレジスタにおいて、N2ビットごとのM
N2個の要素から、各インデックス値によって指示されるソース要素をそれぞれ取得し、前記要素のデータタイプはダブルワードであり、N2ビットごとのM
N2個の要素から選択されたソース要素の数はn2個であり、N2、M
N2、及びn2はいずれも0よりも大きい正の整数である、ことを特徴とする請求項12に記載のプロセッサ。
【請求項16】
前記実行ユニットは、中間ベクトルを作成し、前記中間ベクトルは、少なくとも1つの中間ベクトルパラメータを含み、要素グループが存在している場合に、前記中間ベクトルパラメータの数は前記要素グループの数と等しいが、要素グループが存在していない場合に、前記中間ベクトルパラメータの数は前記ソース要素の数と等しく、選択された各前記ソース要素を前記中間ベクトルの対応する中間ベクトルパラメータにそれぞれ記憶し、前記中間ベクトルパラメータは選択されたソース要素と一対一に対応する関係があり、前記シャッフルパラメータに従い、各前記中間ベクトルパラメータのコンテンツを前記デスティネーションレジスタの対応する位置に書き込む、ことを特徴とする請求項13~15のいずれか1項に記載のプロセッサ。
【請求項17】
前記オペコードは第3のオペコードであり、前記インデックス値は、第1のインデックス値、第2のインデックス値、第3のインデックス値、及び第4のインデックス値を含み、前記第1のインデックス値、第2のインデックス値、第3のインデックス値、及び第4のインデックス値はそれぞれ、異なる位置をインデックスし、前記ソースレジスタは第1のソースレジスタと第2のソースレジスタを含み、
前記実行ユニットは、前記ソースレジスタにおいて、N3ビットごとのM
N3個の要素から、第1のインデックス値と第2のインデックス値によって指示されるソース要素をそれぞれ取得し、前記第2のソースレジスタにおいて、N3ビットごとのM
N3個の要素から、第3のインデックス値と第4のインデックス値によって指示されるソース要素をそれぞれ取得し、前記要素のデータタイプはワードであり、N3ビットごとのM
N3個の要素から選択されたソース要素の数はn3個であり、N3、M
N3、及びn3はいずれも0よりも大きい正の整数であり、前記実行ユニットは、前記第1のインデックス値
によって指示されるソース要素を第1のターゲット要素として決定して、第2のインデックス値
によって指示されるソース要素を第2のターゲット要素として決定し、前記第3のインデックス値
によって指示されるソース要素を第3のターゲット要素として決定して、第4のインデックス値
によって指示されるソース要素を第4のターゲット要素として決定し、前記第1のターゲット要素と前記第2のターゲット要素を前記デスティネーションレジスタの第1の位置に書き込むとともに、前記第3のターゲット要素と前記第4のターゲット要素を前記デスティネーションレジスタの第2の位置に書き込む、ことを特徴とする請求項12に記載のプロセッサ。
【請求項18】
前記オペコードは第4のオペコードであり、
前記実行ユニットは、前記ソースレジスタにおいて、M
N4個の要素から、各インデックス値によって指示されるソース要素をそれぞれ取得し、前記要素のデータタイプはダブルワードであり、選択されたソース要素の数はn4個であり、前記M
N4とn4はいずれも0よりも大きい正の整数である、ことを特徴とする請求項12に記載のプロセッサ。
【請求項19】
前記オペコードは第5のオペコードであり、前記インデックス値は第1のインデックス値と第3のインデックス値を含み、前記第1のインデックス値と第3のインデックス値はそれぞれ、異なる位置をインデックスし、前記ソースレジスタは第1のソースレジスタと第2のソースレジスタを含み、
前記実行ユニットは、前記第1のソースレジスタにおいて、M
N5個の要素から、第1のインデックス値によって指示される第1のソース要素を取得し、前記第1のソースレジスタにおいて、M
N5個の要素から、第3のインデックス値によって指示される第2のソース要素を取得し、前記要素のデータタイプは4ワードであり、選択されたソース要素の数はn5個であり、n5は0よりも大きい正の整数であり、第1のソース要素と第2のソース要素をそれぞれターゲット要素として決定して、前記デスティネーションレジスタの対応する位置に書き込む、ことを特徴とする請求項12に記載のプロセッサ。
【請求項20】
前記ソースレジスタの数は1つ又は複数であり、前記デスティネーションレジスタの数は1つであり、
前記ソースレジスタの数が1つである場合に、前記ソースレジスタ識別子は前記デスティネーションレジスタ識別子と異なり、
前記ソースレジスタの数が複数である場合に、すべての前記ソースレジスタの各ソースレジスタ識別子はいずれも前記デスティネーションレジスタ識別子と異なるか、または、前記ソースレジスタの数が複数である場合に、すべての前記ソースレジスタには、前記デスティネーションレジスタ識別子と同じであるソースレジスタ識別子が1つ存在している、ことを特徴とする請求項11~15又は17~19のいずれか1項に記載のプロセッサ。
【請求項21】
メモリ及び1つ以上のプログラムを含む電子機器であって、前記1つ以上のプログラムは、前記メモリに記憶されており、前記電子機器は、1つ以上のプロセッサにより請求項
1~5又は7~9のいずれか1項に記載のベクトルのシャッフル方法を実行するように構成されている、ことを特徴とする電子機器。
【手続補正2】
【補正対象書類名】明細書
【補正対象項目名】0133
【補正方法】変更
【補正の内容】
【0133】
ステップ403では、前記第1のインデックス値によって指示されるソース要素を第1のターゲット要素として決定して、第2のインデックス値によって指示されるソース要素を第2のターゲット要素として決定する。
【手続補正3】
【補正対象書類名】明細書
【補正対象項目名】0134
【補正方法】変更
【補正の内容】
【0134】
本願の実施例では、第1のソースレジスタから選択された第1のインデックス値によって指示されるソース要素を第1のターゲット要素として決定して、第1のソースレジスタから選択された第2のインデックス値によって指示されるソース要素を第2のターゲット要素として決定する。
【手続補正4】
【補正対象書類名】明細書
【補正対象項目名】0135
【補正方法】変更
【補正の内容】
【0135】
ステップ404では、前記第3のインデックス値によって指示されるソース要素を第3のターゲット要素として決定して、第4のインデックス値によって指示されるソース要素を第4のターゲット要素として決定する。
【手続補正5】
【補正対象書類名】明細書
【補正対象項目名】0136
【補正方法】変更
【補正の内容】
【0136】
本願の実施例では、第2のソースレジスタから選択された第3のインデックス値によって指示されるソース要素を第3のターゲット要素として決定して、第2のソースレジスタから選択された第4のインデックス値によって指示されるソース要素を第4のターゲット要素として決定する。
【手続補正6】
【補正対象書類名】明細書
【補正対象項目名】0187
【補正方法】変更
【補正の内容】
【0187】
選択的には、前記オペコードは第3のオペコードであり、前記インデックス値は、第1のインデックス値、第2のインデックス値、第3のインデックス値、及び第4のインデックス値を含み、前記第1のインデックス値、第2のインデックス値、第3のインデックス値、及び第4のインデックス値はそれぞれ、異なる位置をインデックスし、前記ソースレジスタは第1のソースレジスタと第2のソースレジスタを含み、
前記実行ユニット73は、前記ソースレジスタ72において、N3ビットごとのMN3個の要素から、第1のインデックス値と第2のインデックス値によって指示されるソース要素をそれぞれ取得し、前記第2のソースレジスタにおいて、N3ビットごとのMN3個の要素から、第3のインデックス値と第4のインデックス値によって指示されるソース要素をそれぞれ取得し、前記要素のデータタイプはワードであり、N3ビットごとのMN3個の要素から選択されたソース要素の数はn3個であり、N3、MN3、及びn3はいずれも0よりも大きい正の整数であり、前記第1のインデックス値によって指示されるソース要素を第1のターゲット要素として決定して、第2のインデックス値によって指示されるソース要素を第2のターゲット要素として決定し、前記第3のインデックス値によって指示されるソース要素を第3のターゲット要素として決定して、第4のインデックス値によって指示されるソース要素を第4のターゲット要素として決定し、前記第1のターゲット要素と前記第2のターゲット要素を前記デスティネーションレジスタの第1の位置に書き込むとともに、前記第3のターゲット要素と前記第4のターゲット要素を前記デスティネーションレジスタの第2の位置に書き込む。
【国際調査報告】