CUDA详解(让显卡可以用于图像计算以外的目的。)

 转载:

https://blog.csdn.net/fuhanghang/article/details/122873588

CUDA(Compute Unified Device Architecture,统一计算设备架构),是显卡厂商NVIDIA推出的运算平台。 CUDA™是一种由NVIDIA推出的通用并行计算架构,该架构使GPU能够解决复杂的计算问题。 它包含了CUDA指令集架构(ISA)以及GPU内部的并行计算引擎。 开发人员可以使用C语言来为CUDA™架构编写程序,所编写出的程序可以在支持CUDA™的处理器上以超高性能运行。CUDA3.0已经开始支持C++和FORTRAN。

应用范围

CPU与GPU并用的“协同处理”

计算行业正在从只使用CPU的“中央处理”向CPU与GPU并用的“协同处理”发展。为打造这一全新的计算典范,NVIDIA™(英伟达™)发明了CUDA(Compute Unified Device Architecture,统一计算设备架构)这一编程模型,是想在应用程序中充分利用CPU和GPU各自的优点。该架构已应用于GeForce™(精视™)、ION™(翼扬™)、Quadro以及Tesla GPU(图形处理器)上,对应用程序开发人员来说,这是一个巨大的市场。

 

GPU架构

コンシューマ市場では、Elemental Technologies、MotionDSP、LoiLo の製品など、ほぼすべての重要なコンシューマ ビデオ アプリケーションが CUDA によって高速化されているか、まもなく CUDA によって高速化される予定です。

科学研究コミュニティでは、CUDA は常に人気があります。たとえば、CUDA は AMBER を高速化できるようになりました。AMBER は、新薬の発見を加速するために世界中の学界および製薬業界の 60,000 人以上の研究者によって使用されている分子動力学シミュレーション プログラムです。

金融市場では、Numerix と CompatibL が CUDA サポートをリリースし、新しいカウンターパーティ リスク アプリケーションの 18 倍の高速化を達成しました。Numericx は 400 近くの金融機関で使用されています。

CUDA の幅広い用途により、GPU コンピューティング専用の Tesla GPU が台頭しました。Global Fortune 500 企業は 700 を超える GPU クラスターを導入しており、エネルギー分野の Schlumberger や Chevron、銀行業界の BNP Paribas など、さまざまな分野に携わっています。

Microsoft の Windows 7 と Apple の Snow Leopard オペレーティング システムの登場により、GPU コンピューティングが主流になることは間違いありません。これらの新しいオペレーティング システムでは、GPU は単なるグラフィックス処理ユニットではなく、すべてのアプリケーションで使用できる汎用の並列プロセッサになります。

開発パス

 

グラフィックス カードの発展に伴い、GPU はますます強力になり、画像の表示用に GPU が最適化されています。計算上は汎用CPUを上回りました。このような強力なチップをグラフィックス カードとしてのみ使用するのはあまりにももったいないため、NVIDIA はグラフィックス カードを画像コンピューティング以外の目的にも使用できるように CUDA を発売しました。

G80、G92、G94、G96、GT200、GF100、GF104、GF106、GF110、GF114、GF116、GK110、GK104、GK106、GK107、GM107、GM200、GM204、GM206、GP102、GP104、GP106、GPのみ107、TU102、 TU104、TU106、TU116、TU117 プラットフォーム (つまり、GeForce 8~GeForce RTX2080Ti/GTX1660Ti) NVidia グラフィック カードは CUDA を使用でき、ツール セットの中核は C 言語コンパイラです。G80 には 128 個の個別 ALU があるため、並列計算に非常に適しており、数値計算の速度は CPU よりもはるかに優れています。

CUDA SDK のコンパイラと開発プラットフォームは Windows および Linux システムをサポートしており、Visual Studio2005、2008、および 2010 と統合できます。

 

CUDA (Compute Unified Device Architecture) は、GPU を使用してビジネス、産業、科学における複雑なコンピューティング問題を解決する新しいインフラストラクチャです。これは、従来の方法のように GPU アクセスを実現するためにグラフィックス API インターフェイスに依存する必要がなく、ハードウェアへの直接アクセス インターフェイスを提供する完全な GPU ソリューションです。アーキテクチャ面では、GPU が提供するハードウェア リソースを使用する新しいコンピューティング アーキテクチャが採用されており、大規模なデータ コンピューティング アプリケーションに対して CPU よりも強力なコンピューティング パワーを提供します。CUDA は、C 言語をプログラミング言語として使用して、多数の高性能コンピューティング命令開発機能を提供し、開発者が GPU の強力なコンピューティング機能に基づいて、より効率的な集中的なデータ コンピューティング ソリューションを構築できるようにします。

CUDA アーキテクチャの構成は、開発ライブラリ、実行環境、ドライバの3 つの部分で構成されます(表 2)。

開発ライブラリは、CUDAテクノロジーによって提供されるアプリケーション開発ライブラリですCUDA のバージョン 1.1 は、2 つの標準数学ライブラリ、CUFFT (離散高速フーリエ変換) と CUBLAS (離散基本線形コンピューティング) の実装を提供します。これら 2 つの数学演算ライブラリは、典型的な大規模並列コンピューティングの問題を解決し、集中的なデータ コンピューティングにおいて非常に一般的なタイプのコンピューティングでもあります。開発者は、開発ライブラリに基づいて独自のコンピューティング アプリケーションを迅速かつ便利に構築できます。さらに、開発者は CUDA テクノロジーに基づいてさらに多くの開発ライブラリを実装することもできます。

ランタイム環境は、基本的なデータ型の定義や、さまざまな計算、型変換、メモリ管理、デバイス アクセス、実行スケジューリングなどの関数を含む、アプリケーション開発インターフェイスとランタイム コンポーネントを提供しますCUDAに基づいて開発されたプログラムコードは、実際に実行される際にはCPU上で動作するホストコード(Host Code)とGPU上で動作するデバイスコード(Device Code)の2種類に分かれます。異なる種類のコードは、実行される物理的な場所が異なるため、異なるリソースにアクセスする可能性があるため、対応するランタイム コンポーネントも 3 つの部分 (パブリック コンポーネント、ホスト コンポーネント、デバイス コンポーネント)に分割され、基本的にすべての GPGPU 開発をカバーします。および利用可能なリソース インターフェイスを使用すると、開発者はランタイム環境のプログラミング インターフェイスを通じてさまざまな種類の計算を実装できます。

由于存在着多种GPU版本的NVidia显卡,不同版本的GPU之间都有不同的差异,因此驱动部分基本上可以理解为是CUDA-enable的GPU的设备抽象层,提供硬件设备的抽象访问接口。CUDA提供运行期环境也是通过这一层来实现各种功能的。基于CUDA开发的应用必须有NVIDIA CUDA-enable的硬件支持,NVIDIA公司GPU运算事业部总经理Andy Keane在一次活动中表示:一个充满生命力的技术平台应该是开放的,CUDA未来也会向这个方向发展。由于CUDA的体系结构中有硬件抽象层的存在,因此今后也有可能发展成为一个通用的GPGPU标准接口,兼容不同厂商的GPU产品。

工具包

是一种针对支持CUDA功能的GPU(图形处理器)的C语言开发环境。CUDA开发环境包括:

nvcc C语言编译器

适用于GPU(图形处理器)的CUDA FFT和BLAS库。

分析器

适用于GPU(图形处理器)的gdb调试器(在2008年3月推出alpha版)

CUDA运行时(CUDA runtime)驱动程序(在标准的NVIDIA GPU驱动中也提供)。

CUDA编程手册

CUDA开发者软件开发包(SDK)提供了一些范例(附有源代码),以帮助使用者开始CUDA编程。这些范例包括:

· 并行双调排序

· 矩阵乘法

· 矩阵转置

· 利用计时器进行性能评价

· 并行大数组的前缀和(扫描)

· 图像卷积

· 使用Haar小波的一维DWT

· OpenGL和Direct3D图形互操作示例

· CUDA BLAS和FFT库的使用示例

· CPU-GPU C—和C++—代码集成

· 二项式期权定价模型

· Black-Scholes期权定价模型

· Monte-Carlo期权定价模型

· 并行Mersenne Twister(随机数生成)

· 并行直方图

· 图像去噪

· Sobel边缘检测滤波器

· MathWorks MATLAB®

新的基于1.1版CUDA的SDK范例也已经发布了。

技术功能

· 在GPU(图形处理器)上提供标准C编程语言

CUDA をサポートする NVIDIA GPU (グラフィックス プロセッシング ユニット) での並列コンピューティングのための統合されたソフトウェアおよびハードウェア ソリューションを提供します。

· CUDA 互換の GPU (グラフィックス プロセッシング ユニット) には、低電力ノートブック GPU から高性能のマルチ GPU システムまで、数多くのものが含まれます。

並列データ キャッシュとスレッド実行マネージャーを備えた CUDA 対応 GPU (グラフィックス プロセッシング ユニット)

· 標準 FFT (高速フーリエ変換) および BLAS (基本線形代数サブルーチン) 数値ライブラリ

・コンピューティング用の専用CUDAドライバー

· 中央処理装置 (CPU) から CUDA 対応 GPU (グラフィックス プロセッシング ユニット) への最適化された直接アップロードおよびダウンロード チャネル

CUDA ドライバーは OpenGL および DirectX グラフィックス ドライバーと相互運用します

· Linux 32ビット/64ビットおよびWindows XP 32ビット/64ビットオペレーティングシステムをサポート

· 研究開発言語の目的で、CUDA はドライバへの直接アクセスとアセンブリ言語レベルのアクセスを提供します。

開発状況

1 億台を超える CUDA 対応 GPU が販売されており、何千人ものソフトウェア開発者が無料の CUDA ソフトウェア開発ツールを使用して、さまざまなプロフェッショナル アプリケーションや家庭用アプリケーションの問題を解決しています。これらのアプリケーションは、ビデオやオーディオの処理、物理シミュレーションから、石油やガスの探査、製品設計、医療画像処理、科学研究まで多岐にわたります。

CUDA の中核には、 スレッド グループ階層、共有メモリ、バリア同期という3 つの重要な抽象化があり、C 言語の最小の拡張レベルとしてプログラマに簡単に公開できます。

CUDA ソフトウェア スタックは、いくつかの層、ハードウェア ドライバー、アプリケーション プログラミング インターフェイス (API) とそのランタイム、および 2 つの高レベル汎用数学ライブラリCUFFT と CUBLAS で構成されます。このハードウェアは、軽量のドライバーとランタイム層をサポートするように設計されているため、パフォーマンスが向上します。

対応OS(オペレーティングシステム)

CUDA は Linux および Windows オペレーティング システムをサポートします。CUDA 開発では、ドライバー、ツールキット、SDK を順番にインストールする必要があります。インストールディレクトリ/C/srcディレクトリには学習できるルーチンが多数あります。

NVIDIA はハイ パフォーマンス コンピューティングの分野に参入し、一連の Tesla&CUDA ハイ パフォーマンス コンピューティング ソリューションを発表しました。CUDA テクノロジは、NVIDIA グラフィックス プロセッシング ユニット (GPU) に基づく新しい並列コンピューティング アーキテクチャであり、科学者、エンジニア、その他の専門的な解決できない問題を可能にします。 NVIDIA は、専用の高性能 GPU コンピューティング ソリューションとして、標準の CPU ベースのサーバー クラスターだけでなく、あらゆるワークステーションやサーバーにスーパーコンピューティングをもたらします。

CUDA は GPU コンピューティングの開発環境です。まったく新しいソフトウェアおよびハードウェア アーキテクチャです。GPU は並列データ コンピューティング用のデバイスと見なすことができ、実行される計算は割り当てられ、管理されます。CUDA アーキテクチャでは、従来のいわゆる GPGPU アーキテクチャのように、これらの計算をグラフィックス API (OpenGL や Direct 3D) にマッピングする必要がなくなり、開発者にとって CUDA の開発敷居が大幅に下がりました。CUDA の GPU プログラミング言語は標準の C 言語に基づいているため、C 言語の基礎を持つユーザーは誰でも簡単に CUDA アプリケーションを開発できます。

GPUは大量のデータ処理とデータの並列計算を特徴とするため、大規模な並列計算が必要な分野にはCUDAが非常に適しています。CUDA は C 言語で開発されているほか、FORTRAN アプリケーション インターフェイスも提供しており、将来的には C++、Java、Python などのさまざまな言語をサポートすることが期待されます。グラフィックアニメーション、科学計算、地質学、生物学、物理シミュレーションなどの分野で広く使用できます。

2008 年に、NVIDIA は CUDA SDK2.0 バージョンをリリースし、CUDA の使用範囲を大幅に改善しました。CUDA テクノロジーをますます成熟させます。

背景

コンピューティングは、CPU の「中央処理」から CPU と GPU の「共同処理」へと発展しています。この新しいコンピューティング パラダイムを実現するために、NVIDIA は NVIDIA™ CUDA™ 並列コンピューティング アーキテクチャを発明しました。このアーキテクチャは、NVIDIA Tesla™、NVIDIA Quadro、および NVIDIA GeForce GPU で使用されています。NVIDIA™ CUDA™ アーキテクチャには、アプリケーション開発者にとって大きなユーザー ベースがあります。

科学研究では、NVIDIA™ CUDA™ がカルト的な人気を誇っています。たとえば、NVIDIA™ CUDA™ は、分子動力学シミュレーション プログラムである AMBER を高速化します。世界中の学術界や製薬会社の 60,000 人以上の研究者がこのプログラムを利用して新薬開発を加速しています。金融市場では、Numerix と CompatibL がカウンターパーティ リスク アプリケーションにおける NVIDIA™ CUDA™ のサポートを発表し、その結果 18 倍の高速化を達成しました。

GPU コンピューティングでは、NVIDIA™ Tesla™ GPU の大幅な成長は、NVIDIA™ CUDA™ の広範な採用を示しています。エネルギー分野のシュルンベルジェやシェブロンから銀行業界の BNP パリバに至るまで、グローバル フォーチュン 500 企業が 700 以上の GPU クラスターを導入しています。

転載元: CUDA_百度百科事典

おすすめ

転載: blog.csdn.net/modi000/article/details/132274862