(58)【調査した分野】(Int.Cl.,DB名)
前記ベクトルの前記成分の各々が浮動小数点数を備え、ここにおいて、前記浮動小数点数が、符号ビット、仮数、および前記指数として表される、請求項1に記載の方法。
前記ベクトルの前記成分の各々が浮動小数点数を備え、ここにおいて、前記浮動小数点数が、符号ビット、仮数、および前記指数として表される、請求項7に記載の装置。
【発明を実施するための形態】
【0010】
[0014] 概して、本開示は、ベクトル正規化演算が演算の中間結果を記憶するレジスタをオーバーフローさせないように、ハードウェアを介してベクトルをスケーリングするための技法について説明する。一例では、プロセッサが、ベクトルをスケーリングするためのソフトウェアコード(software code)を実行し得る。3次元ベクトルの場合、ソフトウェアコードは、3次元ベクトルの最も大きい成分を決定し、3次元ベクトルの各成分を最も大きい成分で除算するためのコードを含み得る。しかしながら、ベクトルをスケーリングするためのソフトウェアコードは、ベクトルをスケーリングするためのハードウェアベースの技法よりも遅くなり得る。したがって、ベクトルをスケーリングするためのハードウェアベースの手法が、性能を増加させ得る。
【0011】
[0015] 中央処理ユニット(CPU:central processing unit)またはグラフィックス処理ユニット(GPU)などのプロセッサが、ハードウェア算術論理ユニット(ALU)を含み得る。ALUは、整数算術(integer arithmetic)および論理演算(logical operation)を迅速に実行することが可能であるデジタル回路であり得る。したがって、ALUは、より効率的にベクトルをスケーリングするための理想的な1つのハードウェアであり得る。しかしながら、ALUは、しばしば、加算、減算、AND、およびOR演算などの単純な演算のみを実行するように設計され得るので、ALUは、ベクトルの成分を最も大きい成分で除算することを一般的に含む、ベクトルをスケーリングするための上記で説明した技法を実装するために必要な乗算または除算演算をサポートしないことがある。
【0012】
[0016] 本開示の態様によれば、GPUまたはCPUなど、少なくとも1つのプロセッサが、ベクトルの成分を受信し得、ここにおいて、ベクトルの成分の各々が少なくとも1つの指数を備える、ベクトルの成分のそれぞれの指数の中から最大指数を決定し得る。少なくとも1つのプロセッサはさらに、最大指数に少なくとも部分的に基づいてスケーリング値を決定し得る。CPUまたはGPUのALUは、ベクトルの成分のそれぞれの指数の各々からスケーリング係数(scaling factor)を減算することによって、ベクトルをスケーリングし得る。
【0013】
[0017]
図1は、本開示の1つまたは複数の態様を実装するように構成され得る例示的なコンピューティングデバイスを示すブロック図である。
図1に示されているように、コンピューティングデバイス2は、限定はしないが、ビデオデバイス、メディアプレーヤ、セットトップボックス、携帯電話およびいわゆるスマートフォンなどのワイヤレスハンドセット、携帯情報端末(PDA)、デスクトップコンピュータ、ラップトップコンピュータ、ゲーミングコンソール、ビデオ会議ユニット、タブレットコンピューティングデバイスなどを含むコンピューティングデバイスであり得る。
図1の例では、コンピューティングデバイス2は、中央演算処理装置(CPU)6と、システムメモリ10と、GPU12とを含み得る。コンピューティングデバイス2はまた、ディスプレイプロセッサ14と、トランシーバモジュール3と、ユーザインターフェース4と、ディスプレイ8とを含み得る。トランシーバモジュール3とディスプレイプロセッサ14とは両方とも、CPU6および/またはGPU12と同じ集積回路(IC)の一部であり得るか、両方ともCPU6および/またはGPU12を含む1つまたは複数のICの外部にあり得るか、あるいはCPU6および/またはGPU12を含むICの外部にあるIC中に形成され得る。
【0014】
[0018] コンピューティングデバイス2は、明快のために
図1に示されていない追加のモジュールまたはユニットを含み得る。たとえば、コンピューティングデバイス2は、コンピューティングデバイス2がモバイルワイヤレス電話である例において電話通信を実現するために、そのいずれも
図1に示されていないスピーカーおよびマイクロフォンを含み、またはコンピューティングデバイス2がメディアプレーヤである例においてスピーカーを含み得る。コンピューティングデバイス2はまた、ビデオカメラを含み得る。さらに、コンピューティングデバイス2に示された様々なモジュールおよびユニットは、コンピューティングデバイス2のあらゆる例において必要であるとは限らない。たとえば、ユーザインターフェース4およびディスプレイ8は、コンピューティングデバイス2が、デスクトップコンピュータ、あるいは外部ユーザインターフェースまたはディスプレイとインターフェースする能力がある他のデバイスである例において、コンピューティングデバイス2の外部にあり得る。
【0015】
[0019] ユーザインターフェース4の例としては、限定はしないが、トラックボール、マウス、キーボード、および他のタイプの入力デバイスがある。ユーザインターフェース4はまた、タッチスクリーンであり得、ディスプレイ8の一部として組み込まれ得る。トランシーバモジュール3は、コンピューティングデバイス2と別のデバイスまたはネットワークとの間のワイヤレスまたはワイヤード通信を可能にするための回路を含み得る。トランシーバモジュール3は、ワイヤードまたはワイヤレス通信のための変調器、復調器、増幅器および他のそのような回路を含み得る。
【0016】
[0020] プロセッサ6は、実行のためのコンピュータプログラムの命令を処理するように構成された中央処理ユニット(CPU)など、マイクロプロセッサであり得る。プロセッサ6は、コンピューティングデバイス2の動作を制御する汎用または専用プロセッサを備え得る。ユーザが、プロセッサ6に1つまたは複数のソフトウェアアプリケーションを実行させるために、コンピューティングデバイス2に入力を与え得る。プロセッサ6上で実行するそれらのソフトウェアアプリケーションは、たとえば、オペレーティングシステム、ワードプロセッサアプリケーション、電子メールアプリケーション、スプレッドシートアプリケーション、メディアプレーヤアプリケーション、ビデオゲームアプリケーション、グラフィカルユーザインターフェースアプリケーション、または別のプログラムを含み得る。さらに、プロセッサ6は、GPU12の動作を制御するためのGPUドライバ22を実行し得る。ユーザは、ユーザ入力インターフェース4を介してコンピューティングデバイス2に結合された、キーボード、マウス、マイクロフォン、タッチパッド、または別の入力デバイスなどの1つまたは複数の入力デバイス(図示せず)を介して、コンピューティングデバイス2に入力を与え得る。
【0017】
[0021] プロセッサ6上で実行するソフトウェアアプリケーションは、ディスプレイ8へのグラフィックスデータのレンダリング(rendering)を引き起こすようにプロセッサ6に命令する、1つまたは複数のグラフィックスレンダリング命令を含み得る。いくつかの例では、ソフトウェア命令は、たとえば、オープングラフィックスライブラリ(OpenGL(登録商標):Open Graphics Library)アプリケーションプログラミングインターフェース(API:application programming interface)、オープングラフィックスライブラリエンベディッドシステムズ(OpenGL ES:Open Graphics Library Embedded Systems)API、Direct3D API、X3D API、RenderMan API、WebGL API、あるいは他の公開またはプロプライエタリ規格グラフィックスAPIなど、グラフィックスAPIに準拠し得る。グラフィックスレンダリング命令を処理するために、プロセッサ6は、GPU12にグラフィックスデータのレンダリングの一部または全部を実行させるために、(たとえば、GPUドライバ22を通して)GPU12に1つまたは複数のグラフィックスレンダリングコマンドを発行し得る。いくつかの例では、レンダリングされるべきグラフィックスデータは、グラフィックスプリミティブ(graphics primitive)のリスト、たとえば、点、線、三角形、四角形、三角形ストリップ(triangle strip)などを含み得る。
【0018】
[0022] GPU12は、1つまたは複数のグラフィックスプリミティブをディスプレイ8にレンダリングするためにグラフィックス演算を実行するように構成され得る。したがって、プロセッサ6上で実行しているソフトウェアアプリケーションのうちの1つがグラフィックス処理を必要とするとき、プロセッサ6は、ディスプレイ8にレンダリングするために、GPU12にグラフィックスコマンドとグラフィックスデータとを与え得る。グラフィックスデータは、たとえば、描画コマンド、状態情報、プリミティブ情報、テクスチャ情報などを含み得る。GPU12は、いくつかの事例では、プロセッサ6よりも、複雑なグラフィック関係演算の効率的な処理を行う、高度並列構造で構築され得る。たとえば、GPU12は、並列な様式で複数の頂点またはピクセルに対して演算するように構成された、シェーダユニット(shader unit)など、複数の処理要素を含み得る。GPU12の高度並列特性は、いくつかの事例では、GPU12が、プロセッサ6を使用してディスプレイ8にシーンを直接描画するよりも迅速に、グラフィックス画像(たとえば、GUIならびに2次元(2D)および/または3次元(3D)のグラフィックスシーン)をディスプレイ8上に描画することを可能にし得る。
【0019】
[0023] GPU12は、いくつかの事例では、コンピューティングデバイス2のマザーボードに組み込まれ得る。他の事例では、GPU12は、コンピューティングデバイス2のマザーボード中のポートに取り付けられたグラフィックスカード上に存在し得、または場合によっては、コンピューティングデバイス2と相互動作するように構成された周辺デバイス内に組み込まれ得る。GPU12は、1つまたは複数のマイクロプロセッサ、特定用途向け集積回路(ASIC)、フィールドプログラマブルゲートアレイ(FPGA)、デジタル信号プロセッサ(DSP)、あるいは他の等価な集積またはディスクリート論理回路など、1つまたは複数のプロセッサを含み得る。GPU12はまた、1つまたは複数のプロセッサコアを含み得、したがって、GPU12はマルチコアプロセッサと呼ばれることがある。
【0020】
[0024] GPU12は、グラフィックスメモリ40に直接結合され得る。したがって、GPU12は、バスを使用することなしに、グラフィックスメモリ40からデータを読み取り、グラフィックスメモリ40にデータを書き込み得る。言い換えれば、GPU12は、オフチップメモリの代わりに、ローカルストレージを使用してデータをローカルに処理し得る。そのようなグラフィックスメモリ40は、オンチップメモリと呼ばれることがある。これは、大量のバストラフィックを経験することがある、バスを介してデータを読み取りおよび書き込みするGPU12の必要をなくすことによって、GPU12がより効率的な様式で動作することを可能にする。しかしながら、いくつかの事例では、GPU12は、別個のメモリを含まず、代わりにバスを介してシステムメモリ10を利用し得る。グラフィックスメモリ40は、たとえば、ランダムアクセスメモリ(RAM)、スタティックRAM(SRAM)ダイナミックRAM(DRAM)、消去可能プログラマブルROM(EPROM)、電気的消去可能プログラマブルROM(EEPROM(登録商標))、フラッシュメモリ、磁気データ媒体または光記憶媒体など、1つまたは複数の揮発性または不揮発性メモリあるいは記憶デバイスを含み得る。
【0021】
[0025] いくつかの例では、GPU12は、十分に形成された画像をシステムメモリ10に記憶し得る。ディスプレイプロセッサ14は、システムメモリ10から画像を取り出し、ディスプレイ8のピクセルを、画像を表示するために点灯させる値を出力し得る。ディスプレイ8は、GPU12によって生成された画像コンテンツを表示するコンピューティングデバイス2のディスプレイであり得る。ディスプレイ8は、液晶ディスプレイ(LCD)、有機発光ダイオードディスプレイ(OLED)、陰極線管(CRT)ディスプレイ、プラズマディスプレイ、または別のタイプのディスプレイデバイスであり得る。
【0022】
[0026] 上記で説明したように、GPU12は、整数算術、浮動小数点、および論理演算を実行するデジタル回路であり得るALU24を含み得る。ALU24によって実行され得る演算は、加算、減算、およびビット単位演算を含み得る。いくつかの例では、ALU24は、乗算および除算などの演算を実行することが可能でないことがある。いくつかの例では、プロセッサ6はまた、それが算術および論理演算を実行するデジタル回路であり得るという点でALU24と同様に動作し得る、ALUを含み得る。
【0023】
[0027]
図2は、
図1のプロセッサ6、GPU12、およびシステムメモリ10の例示的な実装形態をさらに詳細に示すブロック図である。
図2に示されているように、プロセッサ6は、その各々がプロセッサ上で実行する1つまたは複数のソフトウェアアプリケーションまたはサービスであり得る、少なくとも1つのソフトウェアアプリケーション18と、グラフィックスAPI20と、GPUドライバ22とを含み得る。
【0024】
[0028] プロセッサ6およびGPU12にとって利用可能なメモリは、システムメモリ10と、フレームバッファ16とを含み得る。フレームバッファ16は、システムメモリ10の一部であり得るか、またはシステムメモリ10とは別個であり得る。フレームバッファ16は、レンダリングされた画像データを記憶し得る。
【0025】
[0029] ソフトウェアアプリケーション18は、GPU12の機能を利用する任意のアプリケーションであり得る。たとえば、ソフトウェアアプリケーション18は、GUIアプリケーション、オペレーティングシステム、ポータブルマッピングアプリケーション、エンジニアリングまたは芸術アプリケーション(artistic application)のためのコンピュータ支援設計プログラム、ビデオゲームアプリケーション、あるいは2Dまたは3Dグラフィックスを使用する別のタイプのソフトウェアアプリケーションであり得る。
【0026】
[0030] ソフトウェアアプリケーション18は、グラフィカルユーザインターフェース(GUI:graphical user interface)および/またはグラフィックスシーンをレンダリングするようにGPU12に命令する1つまたは複数の描画命令を含み得る。たとえば、描画命令は、GPU12によってレンダリングされるべき1つまたは複数のグラフィックスプリミティブのセットを定義する命令を含み得る。いくつかの例では、描画命令は、GUIにおいて使用される複数のウィンドウ処理面の全部または一部を集合的に定義し得る。追加の例では、描画命令は、アプリケーションによって定義されたモデル空間内または世界空間内の1つまたは複数のグラフィックスオブジェクトを含む、グラフィックスシーンの全部または一部を集合的に定義し得る。
【0027】
[0031] ソフトウェアアプリケーション18は、1つまたは複数のグラフィックスプリミティブを表示可能なグラフィックス画像にレンダリングするための1つまたは複数のコマンドをGPU12に発行するために、グラフィックスAPI20を介してGPUドライバ22を呼び出し得る。たとえば、ソフトウェアアプリケーション18は、GPU12にプリミティブ定義(primitive definition)を与えるために、グラフィックスAPI20を介してGPUドライバ22を呼び出し得る。いくつかの事例では、プリミティブ定義は、描画プリミティブ、たとえば、三角形、長方形、三角形ファン(triangle fan)、三角形ストリップなどのリストの形式でGPU12に与えられ得る。プリミティブ定義は、レンダリングされるべきプリミティブに関連付けられた1つまたは複数の頂点を指定する頂点仕様を含み得る。頂点仕様は、各頂点についての位置座標、ならびにいくつかの事例では、たとえば、色座標、法線ベクトル、およびテクスチャ座標など、頂点に関連付けられた他の属性を含み得る。プリミティブ定義はまた、プリミティブタイプ情報(たとえば、三角形、長方形、三角形ファン、三角形ストリップなど)、スケーリング情報、回転情報などを含み得る。
【0028】
[0032] ソフトウェアアプリケーション18によってGPUドライバ22に発行された命令に基づいて、GPUドライバ22は、プリミティブをレンダリングするためにGPU12が実行するための1つまたは複数の演算を指定する1つまたは複数のコマンドを構築し得る。GPU12がCPU6からコマンドを受信したとき、グラフィックス処理パイプライン(graphics processing pipeline)が、コマンドを復号し、コマンド中で指定された演算を実行するようにグラフィックス処理パイプラインを構成する。たとえば、グラフィックス処理パイプラインにおける入力アセンブラが、プリミティブデータを読み取り、グラフィックス処理パイプラインにおける他のグラフィックスパイプラインステージによる使用のためにデータをプリミティブにアセンブルし得る。指定された演算を実行した後、グラフィックス処理パイプラインは、レンダリングされたデータを、ディスプレイデバイスに関連付けられたフレームバッファ16に出力する。
【0029】
[0033] フレームバッファ16は、GPU12のためにデスティネーションピクセル(destination pixel)を記憶する。デスティネーションピクセルは、一意のスクリーンピクセルロケーションに関連付けられ得る。いくつかの例では、フレームバッファ16は、各デスティネーションピクセルについて色成分とデスティネーションアルファ値とを記憶し得る。たとえば、フレームバッファ16は、各ピクセルについて赤、緑、青、アルファ(RGBA)成分を記憶し得、「RGB」成分は色値に対応し、「A」成分はデスティネーションアルファ値に対応する。フレームバッファ16とシステムメモリ10とは別個のメモリユニットであるものとして示されているが、他の例では、フレームバッファ16は、システムメモリ10の一部であり得る。
【0030】
[0034] いくつかの例では、グラフィックス処理パイプラインは、頂点シェーダステージ、ハルシェーダステージ(hull shader stage)、ドメインシェーダステージ、ジオメトリシェーダステージ、およびピクセルシェーダステージのうちの1つまたは複数を含み得る。グラフィックス処理パイプラインのこれらのステージは、シェーダステージと見なされ得る。これらのシェーダステージは、GPU12においてシェーダユニット46上で実行する1つまたは複数のシェーダプログラムとして実装され得る。シェーダユニット46は、処理構成要素のプログラマブルパイプラインとして構成された1つまたは複数のシェーダユニットを備え得る。いくつかの例では、シェーダユニット46は、「シェーダプロセッサ(shader processor)」または「ユニファイドシェーダ(unified shader)」と呼ばれることがあり、グラフィックスをレンダリングするために、ジオメトリ、頂点、ピクセル、または他のシェーディング演算を実行し得る。
【0031】
[0035] GPU12は、グラフィックス処理パイプラインにおける頂点シェーダステージ、ハルシェーダステージ、ドメインシェーダステージ、ジオメトリシェーダステージ、およびピクセルシェーダステージのうちの1つまたは複数を実行するためにコマンドをシェーダユニット46に送ることによって、頂点シェーディング、ハルシェーディング、ドメインシェーディング、ジオメトリシェーディング、ピクセルシェーディングなどの様々なシェーディング演算を実行するようにシェーダユニット46を指定し得る。いくつかの例では、GPUドライバ22が、1つまたは複数のシェーダプログラムをコンパイルし、コンパイルされたシェーダプログラムを、GPU12内に含まれている1つまたは複数のプログラマブルシェーダユニット上にダウンロードするように構成され得る。シェーダプログラムは、たとえば、OpenGLシェーディング言語(GLSL)、ハイレベルシェーディングランゲージ(HLSL)、グラフィックスのためのC(Cg)シェーディング言語など、高レベルシェーディング言語で書き込まれ得る。コンパイルされたシェーダプログラムは、GPU12内のシェーダユニット46の動作を制御する1つまたは複数の命令を含み得る。たとえば、シェーダプログラムは、頂点シェーダステージの機能を実行するためにシェーダユニット46によって実行され得る頂点シェーダプログラム、ハルシェーダステージの機能を実行するためにシェーダユニット46によって実行され得るハルシェーダプログラム、ドメインシェーダステージの機能を実行するためにシェーダユニット46によって実行され得るドメインシェーダプログラム、ジオメトリシェーダステージの機能を実行するためにシェーダユニット46によって実行され得るジオメトリシェーダプログラム、および/またはピクセルシェーダの機能を実行するためにシェーダユニット46によって実行され得るピクセルシェーダプログラムを含み得る。頂点シェーダプログラムは、プログラマブル頂点シェーダユニットまたはユニファイドシェーダユニットの実行を制御し、1つまたは複数の頂点ごとの演算を指定する命令を含み得る。
【0032】
[0036] シェーダユニット46はプロセッサコア48を含み得、プロセッサコア48の各々は、フェッチングおよび復号演算のための1つまたは複数の構成要素と、算術計算を行うための1つまたは複数の算術論理ユニットと、1つまたは複数のメモリと、キャッシュと、レジスタとを含み得る。いくつかの例では、プロセッサコア48は、スカラー処理要素と呼ばれることもある。プロセッサコア48の各々は汎用レジスタ25を含み得る。汎用レジスタ25は、プロセッサコア48中のALU24によって直接アクセスされるべきデータを記憶し得る。たとえば、汎用レジスタ25は、ALU24によってスケーリングされるべきベクトル成分を記憶し得、ALU24によって出力された、スケーリングされたベクトル成分をも記憶し得る。
【0033】
[0037] プロセッサコア48の各々は、ALU24など、スカラーALUを含み得る。上記で説明したように、ALU24は、整数算術、浮動小数点、および論理演算を実行するデジタル回路であり得る。ALU24によって実行され得る演算は、加算、減算、およびビット単位演算を含み得る。いくつかの例では、ALU24は、乗算および除算などの演算を実行することが可能でないことがある。本開示の態様によれば、ALU24は、ベクトルの成分をスケーリングすることによって、ベクトルをスケーリングし得る。ALU24はまた、ベクトルのスケーリングされた成分をグラフィックスメモリ40または汎用レジスタ25に出力し得る。
【0034】
[0038] グラフィックスメモリ40は、GPU12の集積回路に物理的に組み込んだオンチップストレージまたはメモリである。グラフィックスメモリ40がオンチップであるので、GPU12は、システムバスを介してシステムメモリ10から値を読み取るか、またはそれに値を書き込むよりも迅速に、グラフィックスメモリ40から値を読み取り、またはそれに値を書き込むことが可能であり得る。グラフィックスメモリ40は、ベクトルの成分を記憶し得、ALU24によるスケーリングの後のベクトルのスケーリングされた成分をも記憶し得る。グラフィックスメモリ40は、各成分が符号付きビット、シグニフィカント(significant)、および指数としてグラフィックスメモリ40に記憶され得るように、ベクトルの成分を浮動小数点フォーマットで記憶し得る。
【0035】
[0039]
図3は、CPU6またはGPU12によってスケーリングされ得る例示的な3次元ベクトルを示すブロック図である。
図3に示されているように、3次元直交座標系52におけるベクトル50は、ベクトル50のそれぞれの成分54A〜54C(「成分54」)の値を示すタプル(x,y,z)によって表され得る。ベクトル50の成分54は、x成分54Aと、y成分54Bと、z成分54Cとを含み得る。
【0036】
[0040] 上記で説明したように、ベクトル50の成分54の各成分は、符号付きビット、仮数(significand)、および指数(exponent)としてグラフィックスメモリ40または汎用レジスタ25に記憶される浮動小数点値(floating point value)であり得る。たとえば、例示的な浮動小数点値1.2345は、12345が仮数(significand)または仮数(mantissa)であり得、−4が底(base)10の指数であり得るような、12345
*10
-4に等しくなり得る。他の例では、指数は底2の指数であり得る。負の指数値を表すために、指数は、指数値が正の値に変換されるように、バイアスされるかまたはオフセットされ得る。たとえば、指数値−4が11としてメモリに記憶され得るように、値15が指数に加算され得る。
【0037】
[0041]
図4は、ベクトル50の成分54の各成分を表すための例示的な浮動小数点フォーマットを示す概念図である。上記で説明したように、ベクトル50の成分54の各成分は浮動小数点値であり得る。
図4に示されているように、成分54の各成分は、浮動小数点フォーマット60で表され得る。浮動小数点フォーマット60は、浮動小数点フォーマット60によって表される浮動小数点値の符号を示す符号ビット(sign bit)62を含み得る。符号ビット62は、浮動小数点値の符号が負の場合は1であり得、浮動小数点値の符号が正の場合は0であり得る。浮動小数点フォーマット60は、指数64と仮数66とをさらに含み得る。一例では、32ビットIEEE浮動小数点フォーマット60の場合、符号ビット62は1ビットであり得、指数64は、127のバイアスを用いた8ビットであり得、仮数66は、整数が隠された23ビットであり得る。たとえば、浮動小数点値−82.3125は、−1.0100100101
2*2
6に等しくなり得る。この例では、符号ビット62は1に設定され得る。指数64は、127のバイアスにより133
10である、10000101であり得、仮数66は、整数ビットが隠され得るので、01001001010000000000000であり得る。
【0038】
[0042] 本開示の態様によれば、プロセッサ6またはGPU12は、プロセッサ6またはGPU12が、ベクトル正規化演算の中間結果を記憶するレジスタをオーバーフローさせることなしにベクトル50のベクトル正規化を実行し得るように、ベクトル50をスケーリングするためにALU24を使用し得る。ALU24はハードウェア回路であり得るので、ベクトル50のそのようなスケーリングは、たとえば、シェーダユニット46によって実行されるソフトウェアにおいて実行される代わりに、ハードウェアにおいて実行され得る。さらに、ALU24は、加算演算および減算演算を実行するための機能を含み得るが、乗算演算および/または除算演算を実行するための機能を含まないことがあるので、ALU24は、乗算演算または除算演算のいずれをも実行することなしにベクトル50スケーリングすることが可能であり得る。ベクトル50をスケーリングするために、GPU12は、ベクトル50の成分54を受信し得る。たとえば、ベクトル50が3次元ベクトルである場合、GPU12は、ベクトル50のx成分54A、y成分54B、およびz成分54Cを受信し得る。ベクトル50の成分54は、システムメモリ10、グラフィックスメモリ40、シェーダユニット46のメモリ、汎用レジスタ25など、メモリに記憶され得る。
【0039】
[0043] 上記で説明したように、ベクトル50の成分54は各々、少なくとも仮数と指数とを含む浮動小数点値であり得る。GPU12は、成分54の指数の中から最大指数を決定し得る。たとえば、成分54の指数が−1、2、および5である場合、GPU12は、成分54の指数の中からの最大指数が5であると決定し得る。いくつかの例では、成分54の指数の中から最大指数を決定することは、成分54の指数の中から最大値指数(maximum value exponent)を決定することを含み得る。したがって、たとえば、成分54の指数が−1、2、および5である場合、GPU12は、5が2または−1よりも大きいので、成分54の中からの最大値指数が5であると決定し得る。
【0040】
[0044] GPU12が成分54の指数の中から最大指数を決定したことに応答して、GPU12は、成分54の指数の各々をスケーリングするためのスケーリング値を決定し得る。一例では、スケーリング値は最大指数に等しくなり得るので、成分54の指数のためのスケーリング値は5であり得る。別の例では、GPU12は、スケーリングの後のスケーリングされた指数のアンダーフローおよび/またはオーバーフローを防止するように、スケーリング値を決定し得る。この場合、GPU12は、最大指数に少なくとも部分的に基づいてスケーリング値を決定し得る。たとえば、スケーリング値は、最大指数+定数であり得る。たとえば、スケーリング値は、最大指数−(maximum_representable_exponent−1)/2+1であり得る。maximum_representable_exponentは、成分54の浮動小数点フォーマットから導出された定数である、最大表現可能指数(maximum representable exponent)であり得る。たとえば、32ビットIEEE浮動小数点数(floating point number)の場合、最大表現可能指数は128である。32ビット浮動小数点数における指数は8ビットを用いて表されるので、指数範囲は[−127,128](すなわち、両端値を含む−127から128まで)である。別の例では、GPU12は、(最大指数−1)/2−2になるようにスケーリング値を決定し得る。したがって、最大指数15を仮定すれば、スケーリング値は、(15−1)/2−2であり得、それは5であり得る。
【0041】
[0045] GPU12がスケーリング値を決定したことに応答して、ALU24は、成分54の各指数からスケーリング値を減算することによって成分54の各成分をスケーリングするように構成され得る。たとえば、ベクトル50のx成分54A、y成分54B、およびz成分54Cについての指数値−1、2、および5を仮定し、GPU12が、5が成分54の指数の中からの最大指数であると決定することを仮定し、GPU12が、最大指数の値になるようにスケーリング値を決定すること(すなわち、スケーリング値を5に設定すること)を仮定すれば、ALU24は、x成分54Aについての指数値−1から5を減算し得、ALU24は、y成分54Bについての指数値2から5を減算し得、ALU24は、z成分54Cについての指数値5から5を減算し得、それぞれx成分54A、y成分54B、およびz成分54Cについての指数値−6、−3、および0を有する、スケーリングされた成分54を生じる。ALU24によって出力された指数を含む、得られたスケーリングされた成分は、グラフィックスメモリ40、システムメモリ10、汎用レジスタ25など、メモリに記憶され得る。
【0042】
[0046] 上記で説明したように、いくつかの例では、成分54の指数は、バイアスされた指数(biased exponent)であり得る。GPU12およびALU24は、非バイアス指数(unbiased exponent)と同様の様式で、バイアスされた成分を処理し得る。たとえば、15が成分54の各指数に加算されるように、成分54の指数の値−1、2、および5が15だけバイアスされる場合、成分54のバイアスされた指数の値は14、17、および20であり得る。したがって、GPU12は、成分54のバイアスされた指数の中からの最大指数が20であると決定し得る。GPU12が成分54のバイアスされた指数の中から最大指数を決定したことに応答して、GPU12は、最大指数に少なくとも部分的に基づいてスケーリング値を決定し得る。この例では、GPU12は、スケーリング値を最大指数の値に設定し得る。GPU12がスケーリング値を決定したことに応答して、ALU24は、成分54の各指数からスケーリング値を減算することによって成分54の各成分をスケーリングし得る。たとえば、ベクトル50のx成分54A、y成分54B、およびz成分54Cについてのバイアスされた指数値14、17、および20を仮定し、GPU12が、20が成分54の指数の中からの最大指数であると決定することと、スケーリング値が最大指数の値に設定されることとを仮定すれば、ALU24は、x成分54Aについての指数値14から20を減算し得、ALU24は、y成分54Bについての指数値17から20を減算し得、ALU24は、z成分54Cについての指数値20から20を減算し得る。ALU24は、成分54の各指数にバイアス15を加算し、それぞれx成分54A、y成分54B、およびz成分54Cについてのバイアスされた指数値9、12、および15を有する、スケーリングされた成分54を生じ得る。
【0043】
[0047]
ALU24は、ALU24が第1のクロックサイクル(clock cycle)においてスケーリングされたx成分を出力し、第2のクロックサイクルにおいてスケーリングされたy成分を出力し、第3のクロックサイクルにおいてスケーリングされたz成分を出力し得るように、クロックサイクルごとに1つのスケーリングされた成分を出力するように構成され得る。ベクトル50のスケーリングを実行するための例示的な擬似コード(pseudocode)は、次のように表され得る。
【0045】
[0048] 上記の擬似コードに示されているように、src0、src1、およびsrc2は、3次元ベクトルの成分のソースメモリロケーションであり得る。dstは、第1のスケーリングされた成分のためのメモリ中の宛先ロケーションであり得、dst+1は、第2のスケーリングされた成分のためのメモリ中の次の連続する宛先ロケーションであり得、dst+2は、第3のスケーリングされた成分のためのメモリ中の次の連続する宛先ロケーションであり得る。わかるように、スケーリングされた成分は、メモリ中の連続するメモリロケーションに記憶され得る。
【0046】
[0049] 上記に示されているように、GPU12は、成分のいずれかが無限(infinite)であるか、または数(number)でないかどうかを決定し得る。成分が、定義されていないかまたは表現不可能な値である場合、成分は数でないことがある。数でない成分は、指数64が1で満たされ得、仮数66が非0値になり得る。そうである場合、ベクトルの成分はスケーリングされない。他の場合、GPU12は、成分の指数の中からの最大指数に少なくとも部分的に基づいてスケーリング値を決定し得る。src0、src1、およびsrc2中の成分の各々について、指数が0または非正規数(denormal number)である場合、成分はスケーリングされない。非正規数は、最も小さい正規数(normal number)よりも小さい大きさをもつ非0数(non-zero number)であり得る。他の場合、ALU24は、成分の指数をスケーリング値だけ減算することによって、成分をスケーリングし得る。いくつかの例では、宛先メモリロケーションdst、dst+1、またはdst+2のいずれかが、ソースメモリロケーションsrc0、src1、またはsrc2と重複し得る。
【0047】
[0050] GPU12は、ベクトルのスケーリングされた成分を出力するためのスケーリング関数を(rpt2)scale.x、(r)x、(x,y,z)として与えることができ、(rpt2)は、スケーリング命令が、それが3次元ベクトルのスケーリングされたx成分、y成分、およびz成分を出力するために合計3回実行し得るように、初期実行の後に2回繰り返すことになることよりも示し得る。scale.xは、スケーリング関数のための関数名であり得、ただし、scale.xにおけるxは、ベクトルのスケーリングされていない成分を記憶するソースメモリロケーションの開始ロケーションであり得る。(r)xは、スケーリング命令が繰り返されることになることを示し得、(r)xにおけるxは、ベクトルのスケーリングされた成分を記憶するための宛先メモリロケーションの開始ロケーションであり得る。(x,y,z)は、スケーリング関数によってスケーリングされることになるベクトルの成分であり得る。ある時間量中にALU24のパイプラインに発行され得るスケーリング命令の数であり得る、ALU24についてのスループット(throughput)は、スケーリング命令ごとに3サイクルであり得る。発行から完了までのスケーリング命令を実行するためにかかる総時間量であり得る、スケーリング命令を実行する際のALU24のレイテンシ(latency)は、スケーリング命令の実装形態によって異なり得る。
【0048】
[0051]
図5は、ベクトルをスケーリングするための例示的なプロセスを示すフローチャートである。
図5に示されているように、プロセスは、プロセッサ6またはGPU12によって、ベクトルの成分を受信することを含み得、ここにおいて、ベクトルの成分の各々が少なくとも1つの指数を備える(502)。プロセスは、プロセッサ6またはGPU12によって、ベクトルの成分のそれぞれの指数の中から最大指数を決定することをさらに含み得る(504)。プロセスは、プロセッサ6またはGPU12によって、最大成分(maximum component)に少なくとも部分的に基づいてスケーリング値を決定することをさらに含み得る(506)。プロセスは、プロセッサ6またはGPU12のALU24によって、ベクトルの成分のそれぞれの指数の各々からスケーリング値を減算することによってベクトルをスケーリングすることをさらに含み得る(508)。
【0049】
[0052] いくつかの例では、ベクトルをスケーリングすることは、ALU24によって、乗算演算または除算演算を実行することなしにベクトルをスケーリングすることをさらに含み得る。いくつかの例では、ベクトルの成分の各々が浮動小数点数であり得、ここにおいて、浮動小数点数が、符号ビット、仮数、および指数として表され得る。いくつかの例では、ベクトルは3次元ベクトルを備え得、ベクトルの成分は、x成分と、y成分と、z成分とを備え得る。いくつかの例では、ベクトルをスケーリングすることが、ALU24によって、第1のクロックサイクルにおいてベクトルのx成分の第1の指数からスケーリング値を減算することによってベクトルのx成分をスケーリングすることと、ALU24によって、第2のクロックサイクルにおいてベクトルのy成分の第2の指数からスケーリング値を減算することによってベクトルのy成分をスケーリングすることと、ALU24によって、第3のクロックサイクルにおいてベクトルのz成分の第3の指数からスケーリング値を減算することによってベクトルのz成分をスケーリングすることとを含み得る。いくつかの例では、プロセスは、スケーリングされたx成分と、スケーリングされたy成分と、スケーリングされたz成分とをメモリ中の連続する記憶ロケーション(consecutive storage locations)に出力することをさらに含み得る。いくつかの例では、ALU24はハードウェアデジタル回路(hardware digital circuit)であり得る。
【0050】
[0053] いくつかの例では、最大指数に少なくとも部分的に基づいてスケーリング値を決定することは、最大指数になるようにスケーリング値を決定することを含み得る。いくつかの他の例では、最大指数に少なくとも部分的に基づいてスケーリング値を決定することは、最大指数と最大代表指数(maximum representative exponent)とに少なくとも部分的に基づいてスケーリング値を決定することを含み得る。
【0051】
[0054] 1つまたは複数の例では、説明した機能は、ハードウェア、ソフトウェア、ファームウェア、またはそれらの任意の組合せで実装され得る。ソフトウェアで実装される場合、機能は、1つまたは複数の命令またはコードとして、コンピュータ可読媒体上に記憶されるか、またはコンピュータ可読媒体を介して送信され得る。コンピュータ可読媒体は、ある場所から別の場所へのコンピュータプログラムの転送を可能にする任意の媒体を含む、コンピュータデータ記憶媒体または通信媒体を含み得る。データ記憶媒体は、本開示で説明した技法の実装のための命令、コードおよび/またはデータ構造を取り出すために、1つまたは複数のコンピュータあるいは1つまたは複数のプロセッサによってアクセスされ得る、任意の利用可能な媒体であり得る。限定ではなく例として、そのようなコンピュータ可読媒体は、RAM、ROM、EEPROM、CD−ROMまたは他の光ディスクストレージ、磁気ディスクストレージまたは他の磁気ストレージデバイス、あるいは命令またはデータ構造の形態の所望のプログラムコードを搬送または記憶するために使用され得、コンピュータによってアクセスされ得る、任意の他の媒体を備えることができる。また、いかなる接続もコンピュータ可読媒体と適切に呼ばれる。たとえば、ソフトウェアが、同軸ケーブル、光ファイバーケーブル、ツイストペア、デジタル加入者回線(DSL)、または赤外線、無線、およびマイクロ波などのワイヤレス技術を使用して、ウェブサイト、サーバ、または他のリモートソースから送信される場合、同軸ケーブル、光ファイバーケーブル、ツイストペア、DSL、または赤外線、無線、およびマイクロ波などのワイヤレス技術は、媒体の定義に含まれる。本明細書で使用するディスク(disk)およびディスク(disc)は、コンパクトディスク(disc)(CD)、レーザーディスク(登録商標)(disc)、光ディスク(disc)、デジタル多用途ディスク(disc)(DVD)、フロッピー(登録商標)ディスク(disk)およびBlu−ray(登録商標)ディスク(disc)を含み、ここで、ディスク(disk)は、通常、データを磁気的に再生し、ディスク(disc)は、データをレーザーで光学的に再生する。上記の組合せもコンピュータ可読媒体の範囲に含まれるべきである。
【0052】
[0055] コードは、1つまたは複数のデジタル信号プロセッサ(DSP)、汎用マイクロプロセッサ、特定用途向け集積回路(ASIC)、フィールドプログラマブル論理アレイ(FPGA)、あるいは他の等価な集積またはディスクリート論理回路など、1つまたは複数のプロセッサによって実行され得る。したがって、本明細書で使用する「プロセッサ」および「処理ユニット」という用語は、前述の構造、または本明細書で説明した技法の実装に好適な任意の他の構造のいずれかを指すことがある。さらに、いくつかの態様では、本明細書で説明した機能は、符号化および復号のために構成された専用のハードウェアモジュールおよび/またはソフトウェアモジュール内に与えられるか、あるいは複合コーデックに組み込まれ得る。また、本技法は、1つまたは複数の回路または論理要素で十分に実装され得る。
【0053】
[0056] 本開示の技法は、ワイヤレスハンドセット、集積回路(IC)またはICのセット(たとえば、チップセット)を含む、多種多様なデバイスまたは装置において実装され得る。本開示では、開示する技法を実行するように構成されたデバイスの機能的態様を強調するために様々な構成要素、モジュール、またはユニットについて説明したが、それらの構成要素、モジュール、またはユニットを、必ずしも異なるハードウェアユニットによって実現する必要があるとは限らない。むしろ、上記で説明したように、様々なユニットが、好適なソフトウェアおよび/またはファームウェアとともに、上記で説明した1つまたは複数のプロセッサを含めて、コーデックハードウェアユニットにおいて組み合わせられるか、または相互動作ハードウェアユニットの集合によって与えられ得る。
【0054】
[0057] 様々な例について説明した。これらおよび他の例は以下の特許請求の範囲内にある。
以下に、本願出願の当初の特許請求の範囲に記載された発明を付記する。
[C1]
ベクトルをスケーリングするための方法であって、前記方法は、
少なくとも1つのプロセッサによって、ベクトルの成分を受信することと、ここにおいて、前記ベクトルの前記成分の各々が少なくとも1つの指数を備える、
前記少なくとも1つのプロセッサによって、前記ベクトルの前記成分のそれぞれの指数の中から最大指数を決定することと、
前記最大指数に少なくとも部分的に基づいてスケーリング値を決定することと、
前記少なくとも1つのプロセッサの算術論理ユニット(ALU)によって、前記ベクトルの前記成分の前記それぞれの指数の各々から前記スケーリング値を減算することによって、前記ベクトルをスケーリングすることと
を備える、方法。
[C2]
前記ベクトルの前記成分の各々が浮動小数点数を備え、ここにおいて、前記浮動小数点数が、符号ビット、仮数、および前記指数として表される、C1に記載の方法。
[C3]
前記ベクトルが3次元ベクトルを備え、
前記ベクトルの前記成分が、x成分と、y成分と、z成分とを備える、
C1に記載の方法。
[C4]
前記ベクトルをスケーリングすることが、
前記ALUによって、第1のクロックサイクルにおいて前記ベクトルの前記x成分の第1の指数から前記スケーリング値を減算することによって、前記ベクトルの前記x成分をスケーリングすることと、
前記ALUによって、第2のクロックサイクルにおいて前記ベクトルの前記y成分の第2の指数から前記スケーリング値を減算することによって、前記ベクトルの前記y成分をスケーリングすることと、
前記ALUによって、第3のクロックサイクルにおいて前記ベクトルの前記z成分の第3の指数から前記スケーリング値を減算することによって、前記ベクトルの前記z成分をスケーリングすることと
をさらに備える、C3に記載の方法。
[C5]
前記スケーリングされたx成分と、前記スケーリングされたy成分と、前記スケーリングされたz成分とをメモリ中の連続する記憶ロケーションに出力すること
をさらに備える、C4に記載の方法。
[C6]
前記ALUがハードウェアデジタル回路を備える、C1に記載の方法。
[C7]
前記最大指数に少なくとも部分的に基づいてスケーリング値を決定することが、
前記最大指数になるように前記スケーリング値を決定することを備える、C1に記載の方法。
[C8]
前記最大指数に少なくとも部分的に基づいてスケーリング値を決定することが、
前記最大指数と最大代表指数とに少なくとも部分的に基づいて前記スケーリング値を決定することを備える、C1に記載の方法。
[C9]
ベクトルをスケーリングするための装置であって、前記装置は、
ベクトルの成分を記憶するように構成されたメモリと、ここにおいて、前記ベクトルの前記成分の各々が少なくとも1つの指数を備える、
前記ベクトルの前記成分のそれぞれの指数の中から最大指数を決定することと、
前記最大指数に少なくとも部分的に基づいてスケーリング値を決定することと
を行うように構成された少なくとも1つのプロセッサと、
前記ベクトルの前記成分の前記それぞれの指数の各々から前記スケーリング値を減算することによって、前記ベクトルをスケーリングするように構成された算術論理ユニット(ALU)と
を備える、装置。
[C10]
前記ベクトルの前記成分の各々が浮動小数点数を備え、ここにおいて、前記浮動小数点数が、符号ビット、仮数、および前記指数として表される、C9に記載の装置。
[C11]
前記ベクトルが3次元ベクトルを備え、
前記ベクトルの前記成分が、x成分と、y成分と、z成分とを備える、
C9に記載の装置。
[C12]
前記ALUが、
第1のクロックサイクルにおいて前記ベクトルの前記x成分の第1の指数から前記スケーリング値を減算することによって、前記ベクトルの前記x成分をスケーリングすることと、
第2のクロックサイクルにおいて前記ベクトルの前記y成分の第2の指数から前記スケーリング値を減算することによって、前記ベクトルの前記y成分をスケーリングすることと、
第3のクロックサイクルにおいて前記ベクトルの前記z成分の第3の指数から前記スケーリング値を減算することによって、前記ベクトルの前記z成分をスケーリングすることと
を行うように構成された、C11に記載の装置。
[C13]
前記ALUが、
前記スケーリングされたx成分と、前記スケーリングされたy成分と、前記スケーリングされたz成分とを前記メモリ中の連続する記憶ロケーションに出力することを行うように構成された、C12に記載の装置。
[C14]
前記ALUがハードウェアデジタル回路を備える、C9に記載の装置。
[C15]
前記少なくとも1つのプロセッサが、
前記最大指数になるように前記スケーリング値を決定することを行うように構成された、C9に記載の装置。
[C16]
前記少なくとも1つのプロセッサが、
前記最大指数と最大代表指数とに少なくとも部分的に基づいて前記スケーリング値を決定することを行うように構成された、C9に記載の装置。
[C17]
ベクトルをスケーリングするための装置であって、前記装置は、
ベクトルの成分を受信するための手段と、ここにおいて、前記ベクトルの前記成分の各々が少なくとも1つの指数を備える、
前記ベクトルの前記成分のそれぞれの指数の中から最大指数を決定するための手段と、
前記最大指数に少なくとも部分的に基づいてスケーリング値を決定するための手段と、
前記ベクトルの前記成分の前記それぞれの指数の各々から前記スケーリング値を減算することによって、前記ベクトルをスケーリングするための手段と
を備える、装置。
[C18]
前記ベクトルの前記成分の各々が浮動小数点数を備え、ここにおいて、前記浮動小数点数が、符号ビット、仮数、および前記指数として表される、C17に記載の装置。
[C19]
前記ベクトルが3次元ベクトルを備え、
前記ベクトルの前記成分が、x成分と、y成分と、z成分とを備える、
C18に記載の装置。
[C20]
前記ベクトルをスケーリングするための前記手段が、
第1のクロックサイクルにおいて前記ベクトルの前記x成分の第1の指数から前記スケーリング値を減算することによって、前記ベクトルの前記x成分をスケーリングするための手段と、
第2のクロックサイクルにおいて前記ベクトルの前記y成分の第2の指数から前記スケーリング値を減算することによって、前記ベクトルの前記y成分をスケーリングするための手段と、
第3のクロックサイクルにおいて前記ベクトルの前記z成分の第3の指数から前記スケーリング値を減算することによって、前記ベクトルの前記z成分をスケーリングするための手段と
を備える、C19に記載の装置。
[C21]
前記ベクトルをスケーリングするための前記手段が、
前記スケーリングされたx成分と、前記スケーリングされたy成分と、前記スケーリングされたz成分とをメモリ中の連続する記憶ロケーションに出力するための手段をさらに備える、C20に記載の装置。
[C22]
前記最大指数に少なくとも部分的に基づいてスケーリング値を決定するための前記手段が、
前記最大指数になるように前記スケーリング値を決定するための手段を備える、C17に記載の装置。
[C23]
前記最大指数に少なくとも部分的に基づいてスケーリング値を決定するための前記手段が、
前記最大指数と最大代表指数とに少なくとも部分的に基づいて前記スケーリング値を決定するための手段を備える、C17に記載の装置。
[C24]
実行されたとき、1つまたは複数のプログラマブルプロセッサに、
ベクトルの成分を受信することと、ここにおいて、前記ベクトルの前記成分の各々が少なくとも1つの指数を備える、
前記ベクトルの前記成分のそれぞれの指数の中から最大指数を決定することと、
前記最大指数に少なくとも部分的に基づいてスケーリング値を決定することと、
前記ベクトルの前記成分の前記それぞれの指数の各々から前記スケーリング値を減算することによって、前記ベクトルをスケーリングすることと
を行わせる命令を記憶するコンピュータ可読記憶媒体。
[C25]
前記ベクトルの前記成分の各々が浮動小数点数を備え、ここにおいて、前記浮動小数点数が、符号ビット、仮数、および前記指数として表される、C24に記載のコンピュータ可読記憶媒体。
[C26]
前記ベクトルが3次元ベクトルを備え、
前記ベクトルの前記成分が、x成分と、y成分と、z成分とを備える、
C24に記載のコンピュータ可読記憶媒体。
[C27]
前記命令が、前記1つまたは複数のプログラマブルプロセッサに、
第1のクロックサイクルにおいて前記ベクトルの前記x成分の第1の指数から前記スケーリング値を減算することによって、前記ベクトルの前記x成分をスケーリングすることと、
第2のクロックサイクルにおいて前記ベクトルの前記y成分の第2の指数から前記スケーリング値を減算することによって、前記ベクトルの前記y成分をスケーリングすることと、
第3のクロックサイクルにおいて前記ベクトルの前記z成分の第3の指数から前記スケーリング値を減算することによって、前記ベクトルの前記z成分をスケーリングすることと
をさらに行わせる、C26に記載のコンピュータ可読記憶媒体。
[C28]
前記命令が、前記1つまたは複数のプログラマブルプロセッサに、
前記スケーリングされたx成分と、前記スケーリングされたy成分と、前記スケーリングされたz成分とをメモリ中の連続する記憶ロケーションに出力することをさらに行わせる、C27に記載のコンピュータ可読記憶媒体。
[C29]
前記命令が、前記1つまたは複数のプログラマブルプロセッサに、
前記最大指数になるように前記スケーリング値を決定することをさらに行わせる、C24に記載のコンピュータ可読記憶媒体。
[C30]
前記命令が、前記1つまたは複数のプログラマブルプロセッサに、
前記最大指数と最大代表指数とに少なくとも部分的に基づいて前記スケーリング値を決定すること
をさらに行わせる、C24に記載のコンピュータ可読記憶媒体。