巨大なソートされていないファイルから重複したレコードを探す場合、各レコードをハッシュ関数に入力して配列 T のインデックスを得て、各バケット T[i] にハッシュ値が i になった全レコードの番号をリストの形で集める。この配列が完成すると、重複したレコードは必ず同じバケットに存在しているはずである。そこで、リストの要素数が2つ以上のバケット全てについて実際のレコードを求めて比較することで、重複レコードを探すことができる。配列が適切な大きさであれば、この方法が他のどんな方法(ファイルをソートし、隣り合うレコードを比較していく方法など)よりも高速な場合が多い。 類似レコードの探索
ハッシュ関数は、キーが似ているが全く同一ではない場合のレコード検索にも使える。この場合の入力は1つのキーか、似たようなキーを持つ巨大ファイル内の2つのレコードである。このためには、似たようなキーを与えられたとき、最大でも m しか違わないハッシュ値(m は小さい整数で例えば1か2)を生成するハッシュ関数を必要とする。このようなハッシュ関数を使って全レコードに関するハッシュテーブル T を構築すると、似たようなレコードは同じバケットか近いバケットに格納されることになる。すると各バケット T[i] について、-m から m の範囲の k で表されるバケット T[i+k] に格納されているレコード群を相互に比較すればよい。
他の手法に比べてハッシュ関数を用いた手法をより有利にするには、ハッシュ関数の計算コストが十分小さくなければならない。例えば、n個の要素のあるソート済みテーブルにある要素を挿入する場合、二分探索では log2 n 回のキーの比較を必要とする。したがって、ハッシュテーブルを使った手法が二分探索よりも効率的であるためには、ハッシュ関数が1つのキーからハッシュ値を計算するコストが log2 n 回のキー比較のコストよりも小さくなければならない。暗号学的ハッシュ関数は、そういう意味では時間がかかりすぎる[要出典]。 決定性
言い換えれば、典型的な m 個のレコードの集合を n 個のバケットにマッピングする場合、1つのバケットに対応するレコード数が m/n より大きくなる可能性をなるべく小さくすればよい。特に m が n より小さい場合、一部のバケットだけが1つまたはせいぜい2つのレコードを格納するようにすべきである。理想的な完全ハッシュ関数では、各バケットには最大でも1つのレコードしか格納されない。しかし、n が m よりずっと大きくても、衝突を完全に無くすことはできない(誕生日のパラドックスを参照)。
ハッシュ関数を評価する場合、ハッシュ値の分布の一様性はカイ二乗検定で評価できる[3]。 可変な値域
多くの用途では、プログラムを実行するたびにハッシュ値の範囲は変化するし、場合によっては1回の実行中にも範囲が変化することもある(ハッシュテーブルを拡張する必要が生じた場合など)。そのような場合、ハッシュ関数は2つのパラメータを入力する必要がある。1つは入力データ z で、もう1つは生成可能なハッシュ値の数 n である。
よくある方式は、非常に大きな値域(例えば 0 から 232−1)のハッシュ関数を用意し、その出力を n で割った余りを最終的な出力とする。n が2のべき乗なら、割り算ではなくビットマスクやビットシフトで代替できる。この方式を採用するなら、ハッシュ関数は n がいくつであっても、0 から n−1 の間でハッシュ値が一様に分布するようなものを選択する必要がある。関数によっては、奇数や素数など特定の n でないと余りが一様分布にならないこともある。 データ正規化
n 個のキーに対する完全ハッシュ関数が最小 (minimal) であるとは、その値域が n 個の連続な整数(通常 0 から n-1)の場合である。単に参照が単純化されるだけでなく、ハッシュテーブルもコンパクトになり、空きスロットができない。最小完全ハッシュ関数は単なる完全ハッシュ関数よりも求めるのが難しくなる。 一様に分布するデータのハッシュ技法
入力が制限された長さの文字列(例えば、電話番号、自動車のナンバー、送り状番号など)で、個々の入力値は独立にかつ一様な確率で発生する場合、ハッシュ関数は個々のハッシュ値にだいたい同じ個数の入力値をマッピングすればよい。例えば、入力 z が 0 から N−1 の範囲の整数、出力 h が 0 から n−1 の範囲の整数で、N が n より大きいとする。するとハッシュ関数としては、h = z mod n ( z を n で割った余り)、h = (z × n) ÷ N (z を n/N 倍して整数に丸めた値)、などの式が考えられる。 その他の分布のデータのハッシュ技法
入力の出現確率が一様でない場合や、独立性がない場合は、上のような単純な方式ではうまくいかない。例えば、あるスーパーマーケットの利用者は地理的に近い場所に集中しているため、電話番号の先頭数桁は同じになってしまう。その場合、(z × n) ÷ N の式では元の数値の上の桁が残るため、衝突が多発する。一方、z mod n の式では、末尾側の桁が残るため、この場合のハッシュ値の分布はこちらの方がよい。 可変長データのハッシュ技法
def make_hash(S0, b) S <- S0 // 状態を初期化 for k in 1..m do // 入力データ単位をスキャン: S <- F(S, b[k]) // データ単位 k を状態に結合 end return G(S, n) // 状態からハッシュ値を抽出 end
この手法は、テキストのチェックサムやフィンガープリントのアルゴリズムにも利用されている。状態変数 S は32ビットか64ビットの符号無し整数である。例の場合、S0 は 0 でよいし、G(S,n) は単に S mod n でよい。最適な F の選択は難しい問題で、データの性質にも依存する。データ単位 b[k] が1ビットなら、F(S,b) は例えば次のようになる。
def F(S, b) return if highbit(S) == 0 then 2 * S + b else (2 * S + b) ^ P end
ここで highbit(S) は S の最上位ビットを意味し、’*’ 演算子は符号無しの整数の乗算でオーバーフローを無視する操作を表す。’^’ はビット単位の排他的論理和演算を表し、P は適当な固定のワードである[4]。 特定用途のハッシュ関数
多くの場合ヒューリスティクスを利用して、汎用のハッシュ関数よりも特定用途で衝突を削減できるハッシュ関数を設計できる。例えば、入力が FILE0000.CHK、FILE0001.CHK、FILE0002.CHK などのファイル名で、多くの場合このような一連の番号が名前に含まれているとする。すると、ファイル名から番号部分 k を抜き出し、k mod n をハッシュ値とすれば、ほぼ最適な結果が得られる。言うまでもないが、特定の入力に最適化したハッシュ関数は、それ以外の分布を示す入力に対しては非常に悪い結果を生じる。 ハッシュとしてのチェックサム関数
チェックサムやフィンガープリント用のアルゴリズムをハッシュ関数として採用することもできる。それらのアルゴリズムの一部は、任意長の文字列データ z から32ビットまたは64ビットのビット列を生成するので、そこから 0 から n-1 のハッシュ値を容易に抽出できる。
この手法は、ハッシュ値の範囲 n がチェックサムやフィンガープリント関数の値域より十分小さい場合に限って、十分一様に分布するハッシュ値を生成する。しかし、一部のチェックサムは雪崩効果が弱いため、用途によっては不向きである。よく使われているCRC32チェックサムは、上位16ビットだけがハッシュ用途に使える。さらに言えば、入力の各ビットはCRC32の1つのビットにのみ影響を与える。したがって、32ビットのチェックサムをそのままハッシュ値に利用する場合は十分な注意が必要である[5]。 暗号学的ハッシュ関数
ドナルド・クヌースによれば、この用語を最初に使ったのはIBMの Hans Peter Luhn で、1953年1月の社内メモで使っていた。そして、Robert Morris が学会誌 Communications of the ACM に掲載した論文でこの用語を使い、単なるジャーゴンから正式な専門用語に昇格した[7]。 脚注・出典
^ https://kotobank.jp/word/要約関数-653412
^ "Robust Audio Hashing for Content Identification" by Jaap Haitsma, Ton Kalker and Job Oostveen
^ Bret Mulvey, Hash Functions. Accessed April 11, 2009
^ A. Z. Broder. Some applications of Rabin's fingerprinting method. In Sequences II: Methods in Communications, Security, and Computer Science, pages 143--152. Springer-Verlag, 1993
^ Bret Mulvey, Evaluation of CRC32 for Hash Tables, in Hash Functions. Accessed April 10, 2009.
^ Bret Mulvey, Evaluation of SHA-1 for Hash Tables, in Hash Functions. Accessed April 10, 2009.
^ Knuth, Donald (1973). The Art of Computer Programming, volume 3, Sorting and Searching. pp. 506–542
Hash Functions and Block Ciphers by Bob Jenkins
Integer Hash Function by Thomas Wang
The Goulburn Hashing Function - ウェイバックマシン(2009年3月19日アーカイブ分) (PDF) by Mayur Patel
Hash Functions by Paul Hsieh
実装
GNU gperf
General purpose hash function algorithms (C/C++/Pascal/Java/Python/Ruby)
The Murmur Hash Function by Austin Appleby
HSH 11/13 by Herbert Glarner
FNV Fowler, Noll, Vo Hash Function
qDecoder's C/C++ hash functions — オープンソースのライブラリ
これにより、「Core Ultra 7 165H」はRyzen 7 7840Uと比較してシングルスレッド性能は12%高速、マルチスレッド性能は11%高速。実アプリベースのベンチにおいては、UL Procyon Video Editingでは31%、PugetBench for Premiere Proでは41%、PugetBench for Lightroomでは19%高速だという。
Is there a genuine reason this cheap PSU has a block of iron filings in it or are they trying to make it feel heavy?
byu/RedditCringe990 inpcmasterrace
統合型シェーダーアーキテクチャを採用したNVIDIA GeForce 8シリーズではWindows / Mac OS X / Linux用の標準的な汎用Cコンパイラ環境 (CUDA) が提供され、一方ATI Radeon HD 2000シリーズではハードウェアに直接アクセスできる環境 (Close to Metal(英語版)) が、そしてRadeon HD 4000シリーズ以降ではATI Stream(Brook+言語と抽象化レイヤーであるCAL)によるアクセス手段が用意されている[6]。
実態としては最上位でもミドルクラスの性能であり、Resizable BAR 非対応のマシンでのパフォーマンスの大幅低下やドライバの完成度の低さやアイドル時の電力効率の低さなどで主要2社の製品に劣るものの、既に十分使える製品となっているため、主要2社に対するカウンターとしての存在感を示すことには成功したと言える。
AMDのGPUは、Radeon HD 2000~HD 6000シリーズにおいてVLIWを採用していたが、HD 7000シリーズ以降では、グラフィックスだけでなくGPGPUでも性能を発揮できるようにするために、非VLIWなSIMDとスカラー演算ユニットにより構成されたGraphics Core Next (GCN) アーキテクチャを採用している[32]。AMD GPUではWavefront単位(64ハードウェアスレッド)での並列処理実行が特徴となっている。
^ 小口哲司他 (1987年). “μPD7220後継のグラフィックス・コントローラLSI, コピーや塗りつぶし機能を強化 - 日経エレクトロニクス1987.2.23” (PDF). Oguchi R&D. 2020年11月15日閲覧。
^ Microsoft releases DirectX 7.0 | Windows Server content from Windows IT Pro
^ Schechter, Greg (2006年3月19日). “DWM's use of DirectX, GPUs, and hardware acceleration” (英語). Greg Schechter's Blog. 2009年2月14日閲覧。
^ 【レビュー】初の統合型シェーダーアーキテクチャ「GeForce 8800シリーズ」を試す (1) 新アーキテクチャで登場したG80 | マイナビニュース
^ a b 日経エレクトロニクス 2007/10/8 「プロセサはマルチ×マルチへ」
^ AMDのGPGPU戦略は新章へ - ATI Streamの展望、DirectX Compute Shaderの衝撃 (1) Radeon HD 4000シリーズでネイティブGPGPU | マイナビニュース
^ MicrosoftがGPGPU開発向けC++の拡張「C++ AMP」を発表 - 多和田新也(AFDSレポート)、PC Watch、Impress(2011年6月17日付配信、2012年3月24日閲覧)
^ テッセレーションの概要
^ 現実路線へ修正されたAMDのFUSION - 後藤弘茂のWeekly海外ニュース、PC Watch、Impress(2007年12月25日付配信、2012年3月24日閲覧)
^ Intelの次期CPU「Ivy Bridge(アイビーブリッジ)」を裸にする - 後藤弘茂のWeekly海外ニュース、PC Watch、Impress(2012年3月2日付配信、2012年3月24日閲覧)
^ Intel NehalemとAMD FUSION 両社のCPU+GPU統合の違い - 後藤弘茂のWeekly海外ニュース、PC Watch、Impress(2007年10月11日付配信、2012年3月24日閲覧)
^ CPUとGPUの境界がなくなる時代が始まる2009年のプロセッサ - 後藤弘茂のWeekly海外ニュース、PC Watch、Impress(2008年12月2日付配信、2012年3月24日閲覧)
^ 5981_High_Bandwidth_Memory_HBM_FNL - High-Bandwidth-Memory-HBM.pdf
^ 【レビュー】初のHBM搭載ビデオカード「Radeon R9 Fury X」を試す - PC Watch
^ これが“4096”の性能だ:“Fiji”と“HBM”の実力を「Radeon R9 Fury X」で知る (1/5) - ITmedia PC USER
^ Hot Chips 27 - AMDの次世代GPU「Fury」 (1) HBMを採用したAMDのGPU「Radeon R9 Fury」 | マイナビニュース
^ 株式会社インプレス (2018年3月20日). “【後藤弘茂のWeekly海外ニュース】 Intelなどプロセッサベンダーがけん引するHBM3規格” (日本語). PC Watch 2018年11月12日閲覧。
^ NVIDIA® OptiX アプリケーション・エンジン | NVIDIA
^ NVIDIA® OptiX Application Acceleration Engine | NVIDIA
^ GTC - NVIDIA「OptiX」を解説、レイトレーシングはインタラクティブの時代へ (1) なぜ、今、レイトレーシングなのか | マイナビニュース
^ 4Gamer.net ― PowerVRのImaginationが“ハイエンドGPU”の設計に着手。ハイブリッドレンダリングハードウェア,そして新API「OpenRL」とは?
^ “GPU Shortage, Affordable Robodog, Humanizing Large Language Models, and more” (英語). GPU Shortage, Affordable Robodog, Humanizing Large Language Models, and more (2023年8月17日). 2023年10月30日閲覧。
^ NVIDIA TESLA: A UNIFIED GRAPHICS AND COMPUTING ARCHITECTURE P.44 IEEE 2008年
^ ホワイトペーパー; NVIDIA の次世代 CUDA™コンピュートアーキテクチャ: Fermi™
^ An Introduction to Modern GPU Architecture P.44 NVIDIA
^ NVIDIA GPUの構造とCUDAスレッディングモデル
^ a b c d e f g h i j k l m n o p NVIDIA (2009年). “Whitepaper; NVIDIA's Next Generation CUDA™ Compute Architecture: Fermi™ (V1.1)”. pp. 7-8. 2015年12月5日閲覧。
^ a b c ■後藤弘茂のWeekly海外ニュース■ DirectX 11でも強力なNVIDIAの新GPU「GF100」 PC Watch 2010年1月19日
^ a b c d e f GPU Computing Applications P.42 NVIDIA 2011年
^ NVIDIA (2009年). “Whitepaper; NVIDIA's Next Generation CUDA™ Compute Architecture: Fermi™ (V1.1)”. p. 11. 2015年12月5日閲覧。
^ 4Gamer.net ― NVIDIA,Fermi世代の次期GeForce「GF100」グラフィックスアーキテクチャを発表
^ AMD's Graphics Core Next Preview: AMD's New GPU, Architected For Compute P.3 2011年12月21日
^ a b c d e f g h i j k l m n o p q r s t u v w AMD GRAPHIC CORE NEXT P.10 AMD 2011年7月
^ a b c d e f g h i j k l m n AMD GRAPHIC CORE NEXT P.39 AMD 2011年7月
^ a b c AMD GRAPHIC CORE NEXT P.24 AMD 2011年7月
^ AMD GRAPHIC CORE NEXT P.33 AMD 2011年7月
^ 【特別企画】歴代家庭用ゲーム機を軒並み分解――TGS2008「ゲーム科学博物館」より(7ページ目) | 日経 xTECH(クロステック)
^ 後藤弘茂のWeekly海外ニュース - PLAYSTATION 3のグラフィックスエンジンRSX
^ PS Vitaで採用されるGPUコア「PowerVR SGX543MP4+」のImaginationに聞く「+」の意味。PowerVRは次世代ゲーム機への採用も目指す!? - 4Gamer.net
^ 【西川善司】Wii UのGPU性能と新型コントローラに秘められた「コアゲーマー求心」の裏戦略 - 4Gamer.net
^ [CEDEC 2012]3DSはまだその実力を100%発揮できていない!? 3DSが搭載するGPUコア「PICA200」の詳細 - 4Gamer.net
^ 後藤弘茂のWeekly海外ニュース - NVIDIAチーフ・サイエンティスト インタビュー(下)
^ 3Dグラフィックス・マニアックス (5) GPUとシェーダ技術の基礎知識(5) | マイナビニュース
^ NVIDIA Gaming Technology Powers Nintendo Switch | NVIDIA Blog
^ Conformant Products - The Khronos Group Inc
^ 【後藤弘茂のWeekly海外ニュース】PlayStation 4のAPUアーキテクチャの秘密 - PC Watch
^ CreativeからGeForce 256搭載ビデオカードが登場 - AKIBA PC Hotline! 1999年10月9日号
^ GeForce 256
^ 3Dlabs Wildcat VP760 Datasheet
^ ATIがDirectX 9に対応したVPU「RADEON 9700」をリリース
^ 5G時代のエッジに求められるVPUとは?米インテル担当者に聞く | 日経クロステック(xTECH)
^ Intel、次世代のMeteor LakeにVPUを統合予定。第13世代CoreでLE Audio対応も - PC Watch
^ 【後藤弘茂のWeekly海外ニュース】CPUとGPUのメモリ空間を統一するAMDの「hUMA」アーキテクチャ - PC Watch
^ 【後藤弘茂のWeekly海外ニュース】AMD Kaveriのメモリアーキテクチャと今後のAPU進化 - PC Watch
^ CPU と GPU の比較: 違いを理解する | Intel
^ GeForce RTX 30 シリーズ ノート PC - NVIDIA
^ Razer Core X - Thunderbolt™ 3 eGPU
^ Mac で外付けのグラフィックプロセッサを使う - Apple サポート (日本)
^ Mac で Blackmagic eGPU を使う - Apple サポート (日本)
^ Matrox、NVIDIAのカスタム版Quadroを採用したビデオカード - PC Watch
^ Appleから利用停止宣告を受けたImaginationの今 - EE Times Japan
^ 4Gamer.net ― ATIにお別れ。AMD,ATIブランドを統合し,GPUは「AMD Radeon」に
^ ASCII. “インテルとATIが広範なクロスライセンス契約──RADEON統合チップセット登場も”. ASCII.jp. 2023年6月22日閲覧。
^ Intergraph - 古典コンピュータ愛好会
^ Macronix - VideoChips
^ ASCII. “業界に痕跡を残して消えたメーカー CG業界を牽引したSGI (1/4)”. ASCII.jp. 2023年6月22日閲覧。
^ “sgistuff.net : Hardware : Graphics”. www.sgistuff.net. 2023年6月22日閲覧。
^ EETimes (1999年8月10日). “SGI graphics team moves to Nvidia”. EE Times. 2023年6月22日閲覧。
^ 1991年 もっと大きい画面が欲しい よりリアルに高速描画したい(アイ・オー・データ機器)
(c) The Financial Times Limited 2023. All Rights Reserved. FT and Financial Times are trademarks of the Financial Times Ltd. Not to be redistributed, copied, or modified in any way. The Nikkei Inc. is solely responsible for providing this translation and the Financial Times Limited does not accept any liability for the accuracy or quality of the translation.