<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Gpu on QSysArch - Quantum Computer System Architecture</title><link>https://qsysarch.com/ja/categories/gpu/</link><description>Recent content in Gpu on QSysArch - Quantum Computer System Architecture</description><generator>Hugo</generator><language>ja</language><lastBuildDate>Sun, 28 Jun 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://qsysarch.com/ja/categories/gpu/index.xml" rel="self" type="application/rss+xml"/><item><title>xPU：AI推論ハードウェアアクセラレーションマイクロアーキテクチャ</title><link>https://qsysarch.com/ja/posts/ai-inference-hardware-acceleration-architecture/</link><pubDate>Sun, 28 Jun 2026 00:00:00 +0000</pubDate><guid>https://qsysarch.com/ja/posts/ai-inference-hardware-acceleration-architecture/</guid><description>&lt;p&gt;xPU：これは、特定のワークロードに合わせてカスタマイズされたあらゆるコンピューティングアーキテクチャを表すことができる、特殊な処理ユニット（PU）の総称です。一般的なバリエーションとしては、GPU（グラフィックス）、TPU（テンソル／AI）、NPU（ニューラル）、DPU（データ）、PPU（パルス、主に量子制御スタックに使用）などがあります。&lt;/p&gt;&#10;&lt;p&gt;&#10;&lt;img class="glightbox" src="https://qsysarch.com/images/gpxpus/xpu-system-architecture.webp" alt="XPUs: 特殊化されたコプロセッシングシステムアーキテクチャ" /&gt;&lt;/p&gt;&#10;&lt;p&gt;この非常に短いメモは、AI推論に適用されるxPU市場の状況に関する洞察を提供することを目的としています。&lt;/p&gt;&#10;&lt;h1 id="市場概況"&gt;&#10; 市場概況&#10; &lt;a class="heading-link" href="#%e5%b8%82%e5%a0%b4%e6%a6%82%e6%b3%81"&gt;&#10; &lt;i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"&gt;&lt;/i&gt;&#10; &lt;span class="sr-only"&gt;見出しへのリンク&lt;/span&gt;&#10; &lt;/a&gt;&#10;&lt;/h1&gt;&#10;&lt;p&gt;AI推論ASICの市場環境を分析する際、最も有用な指標は、単純な性能ではなく、ベンダーの差別化が3～5年の期間にわたって維持可能かどうかである。この観点から、以下の3つのクラスターが浮かび上がる。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;&lt;strong&gt;ユニバーサルプラットフォーム&lt;/strong&gt;: NVIDIA と &lt;strong&gt;垂直統合型&lt;/strong&gt;: AMD、Google&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;&lt;strong&gt;現在の挑戦者&lt;/strong&gt; Groq、Cerebras、FuriosaAI、Positron、SambaNova、Axelera AI。&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;&lt;strong&gt;将来の課題&lt;/strong&gt;: エクストロピック、ノーマルコンピューティング、アンコンベンショナル、モトロニクス、アケトニクス &#10;&lt;img class="glightbox" src="https://qsysarch.com/images/gpxpus/xPUs-manufacturer-logos.webp" alt="xPU メーカーの一部" /&gt;&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h3 id="ユニバーサルプラットフォーム"&gt;&#10; ユニバーサルプラットフォーム&#10; &lt;a class="heading-link" href="#%e3%83%a6%e3%83%8b%e3%83%90%e3%83%bc%e3%82%b5%e3%83%ab%e3%83%97%e3%83%a9%e3%83%83%e3%83%88%e3%83%95%e3%82%a9%e3%83%bc%e3%83%a0"&gt;&#10; &lt;i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"&gt;&lt;/i&gt;&#10; &lt;span class="sr-only"&gt;見出しへのリンク&lt;/span&gt;&#10; &lt;/a&gt;&#10;&lt;/h3&gt;&#10;&lt;p&gt;&lt;a href="https://www.nvidia.com/" class="external-link" target="_blank" rel="noopener"&gt;NVIDIA&lt;/a&gt;&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;アーキテクチャ：GPU（2024年はBlackwellアーキテクチャ）&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;コアとなる強み：エコシステムへの囲い込み、ソフトウェアスタックの深さ、完全なシステム統合&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;対象ワークロード：汎用 — 大規模なLLMトレーニングと推論 - グラフィックシェーダー&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;脆弱性：高コスト、高消費電力。スパースコンピューティングには最適化されていない。&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;&#10;&lt;img class="glightbox" src="https://qsysarch.com/images/gpxpus/nvidia-blackwell-microarchitecture.webp" alt="NVIDIA Blackwellマイクロアーキテクチャ" /&gt;&lt;/p&gt;&#10;&lt;h3 id="垂直統合企業"&gt;&#10; 垂直統合企業&#10; &lt;a class="heading-link" href="#%e5%9e%82%e7%9b%b4%e7%b5%b1%e5%90%88%e4%bc%81%e6%a5%ad"&gt;&#10; &lt;i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"&gt;&lt;/i&gt;&#10; &lt;span class="sr-only"&gt;見出しへのリンク&lt;/span&gt;&#10; &lt;/a&gt;&#10;&lt;/h3&gt;&#10;&lt;p&gt;&lt;a href="https://cloud.google.com/tpu" class="external-link" target="_blank" rel="noopener"&gt;Google&lt;/a&gt;&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;アーキテクチャ：TPU、カスタムASIC（シストリック）&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;コアとなる強み：垂直統合；Google規模での最低コスト&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;対象ワークロード: Google Cloudワークロード、Gemini推論&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;脆弱性：Google Cloudからのみ利用可能。GoogleからTPUコアを購入することはできません。&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;&#10;&lt;img class="glightbox" src="https://qsysarch.com/images/gpxpus/google-ironwood-tpu.webp" alt="Google TPU Ironwood: 2025 TPUマイクロアーキテクチャ" /&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;a href="https://www.amd.com/en/products/accelerators/instinct.html" class="external-link" target="_blank" rel="noopener"&gt;AMD&lt;/a&gt;&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;アーキテクチャ：MI300 Instinct + ROCm（AMD独自のCUDA）&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;コアの強み: CUDA の価格設定の代替手段。馴染みのある GPU モデル。&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;対象ワークロード：クラウドコスト重視のHPCおよび推論&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;脆弱性：CUDAに対するソフトウェアのギャップ。最先端のエコシステム（例：NVQLINK）への対応が遅れている。&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;&#10;&lt;img class="glightbox" src="https://qsysarch.com/images/gpxpus/amd-mi300-microarchitecture.webp" alt="AMD Radeon Instinct MI3xx システムマイクロアーキテクチャ" /&gt;&lt;/p&gt;</description></item><item><title>一般行列乗算（GEMM）カーネル</title><link>https://qsysarch.com/ja/posts/gemm-kernels/</link><pubDate>Sat, 28 Mar 2026 00:00:00 +0000</pubDate><guid>https://qsysarch.com/ja/posts/gemm-kernels/</guid><description>&lt;p&gt;このメモでは、GPUの基本に立ち返ります。特に、深層学習の中核となる演算である行列乗算に焦点を当てます。まず、基本的な実装と学術的な実装について説明します。次に、GPUを効率的に使用するために必要な最適化について見ていきます。&lt;/p&gt;&#10;&lt;h1 id="単純な行列乗算器の理解"&gt;&#10; 単純な行列乗算器の理解&#10; &lt;a class="heading-link" href="#%e5%8d%98%e7%b4%94%e3%81%aa%e8%a1%8c%e5%88%97%e4%b9%97%e7%ae%97%e5%99%a8%e3%81%ae%e7%90%86%e8%a7%a3"&gt;&#10; &lt;i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"&gt;&lt;/i&gt;&#10; &lt;span class="sr-only"&gt;見出しへのリンク&lt;/span&gt;&#10; &lt;/a&gt;&#10;&lt;/h1&gt;&#10;&lt;p&gt;まずは、教科書によく載っている基本的な例から始めましょう。&lt;/p&gt;&#10;&lt;div class="code-block"&gt;&#10; &lt;div class="code-header"&gt; &lt;span data-label-text="Cpp"&gt;&lt;i class="fas fa-code fa-fw small"&gt;&lt;/i&gt;&lt;/span&gt; &lt;button aria-label="copy" data-title-succeed="Copied!"&gt;&lt;i class="far fa-clipboard"&gt;&lt;/i&gt;&lt;/button&gt;&lt;/div&gt;&#10; &#10; &lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-cpp" data-lang="cpp"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt;/**&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt;* Kernel to perform matrix multiplication C = A × B&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt;* A is of size N x M, B is M x N, and C is N x N&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt;* Each thread computes one element of matrix C.&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt;*/&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;__global__&lt;/span&gt; &lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;naive_matrix_multiply&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;float&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;A&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kt"&gt;float&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;B&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kt"&gt;float&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;C&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// Calculate global row and column for this thread&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;row&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;blockIdx&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;y&lt;/span&gt; &lt;span class="cm"&gt;/* 0...16 */&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;blockDim&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;y&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;threadIdx&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;y&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;col&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;blockIdx&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt; &lt;span class="cm"&gt;/* 0...16 */&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;blockDim&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;threadIdx&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;row&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="n"&gt;N&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="n"&gt;col&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="n"&gt;N&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kt"&gt;float&lt;/span&gt; &lt;span class="n"&gt;sum&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mf"&gt;0.0f&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;k&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="n"&gt;k&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="n"&gt;M&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="n"&gt;k&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// C[row][col] = sum(A[row][i] * B[i][col])&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;sum&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="n"&gt;A&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;row&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;N&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;k&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;B&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;k&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;N&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;col&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;C&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;row&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;N&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;col&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;sum&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;p&gt;一見すると、これは簡単そうに見えます。出力行列Cの各セルを計算するだけです。このカーネルコードは、目的を達成しているように見えます。以下に、カーネルをより視覚的に表現したものを示します。&lt;/p&gt;</description></item></channel></rss>