C++ AMP
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2022/11/20 10:10 UTC 版)
C++ AMP (C++ Accelerated Massive Parallelism) [1]とは、マイクロソフトが中心になって開発していた、演算アクセラレータを活用した並列プログラミングのためのC++言語拡張およびライブラリである。バックエンドとしてDirectCompute (DirectX) やOpenCLなどを使用した実装が存在している。C++ AMPによって、DirectComputeやOpenCLよりも高レベルの並列プログラミングAPIが提供される。
概要
マイクロソフトはWindows上においてGPGPUを標準化するために、DirectX 11にてDirectComputeを導入した。しかし、DirectComputeはDirect3D APIを直接操作する必要があるため、OpenMPを利用した一般的なCPU向けのC++並列プログラミングなどと比較してハードルが高い[2]。マイクロソフトはより抽象化された純粋C++プログラミングに近いGPU並列プログラミングモデルを提供するAPIおよび言語拡張として、2012年にC++ AMPの仕様を公開した[3]。また、マイクロソフトによるC++ AMPの公式プロプライエタリ実装として、Microsoft Visual C++ 2012はDirectComputeをバックエンドとした最初のC++ AMP対応コンパイラとなっている。
C++ AMPのライブラリおよびC++ AMPに対応したVisual C++コンパイラが付属しているのはVisual Studio 2012以降であるが、Visual Studio 2013ではC++ AMP v1.2規格に対応し、さらにコンピュートシェーダー以外のシェーダーステージとの相互運用やテクスチャフィルタリング(サンプラー)などの機能が強化されている[4] [5] [6]。しかしVisual C++ 2022以降、C++ AMPは非推奨となった[7]。
なお、C++ AMP自体はDirectCompute/Windows専用というわけではなく、またGPU専用というわけでもない[8]。AMDとマイクロソフトは、OpenCLなどをバックエンドとするLinuxやOS X向けのC++ AMP v1.2オープン実装を発表した[9]。その後、同コンパイラはMulticoreWareを経てRadeon Open Compute (ROCm) プラットフォームに移管され、Clamp, Kalmar, HCCと名前を変えながら開発が続けられていたが、2019年6月予定の最終リリースをもってHCCの開発が終了することになった[10]。HCCでは、OpenCLのカーネル記述言語"OpenCL C"や中間言語"SPIR"[11]、およびHSA (Heterogeneous System Architecture) の中間言語"HSAIL"[12]への変換層が提供され、Visual C++版よりもさらにヘテロジニアス環境向けを意識した実装となっている。
MSDNブログではCUDA、OpenCL、DirectComputeプログラマー向けに、各APIに対応するC++ AMP相当機能の比較資料が公開されている。
- C++ AMP for the CUDA Programmer - Parallel Programming in Native Code - Site Home - MSDN Blogs
- C++ AMP for the OpenCL Programmer - Parallel Programming in Native Code - Site Home - MSDN Blogs
- C++ AMP for the DirectCompute Programmer - Parallel Programming in Native Code - Site Home - MSDN Blogs
コード例
C++ AMPのコード例を示す。OpenMPの#pragma omp parallel for
のように、並列処理するコード単位すなわちカーネルを、C++11のラムダ式を使ってインラインで記述している部分が特徴的である。デフォルトのアクセラレーターを使用する場合、OpenCLやDirectComputeのような冗長なデバイス準備処理の記述も不要となる。
なおVisual C++実装では、実行環境にDirectX 11対応のGPUが搭載されている場合、restrict(amp)
句が指定されたコードの実行にはGPUが使用される[13]。対応GPUが搭載されていない場合は、Direct3D WARPデバイスやREFデバイスなどによるCPUエミュレーション実行(フォールバック)が提供される[14]。
等差数列を作成する例
#include <amp.h>
using namespace concurrency;
int main()
{
const int ElemCount = 100;
int ary[ElemCount];
array_view<int, 1> av(ElemCount, ary);
parallel_for_each(extent<1>(ElemCount),
[=](index<1> idx) restrict(amp)
{
int i = idx[0];
av[i] = i;
});
av.synchronize();
}
多次元配列の例
#include <cstdio>
#include <amp.h>
#include <amp_graphics.h>
using namespace concurrency;
using namespace concurrency::graphics;
int main()
{
const int width = 10;
const int height = 3;
const int depth = 2;
const int elemCount = width * height * depth;
std::vector<float_3> srcHost(elemCount);
std::vector<float_3> dstHost(elemCount);
for (int z = 0; z < depth; ++z)
for (int y = 0; y < height; ++y)
for (int x = 0; x < width; ++x)
{
srcHost[z * height * width + y * width + x] = float_3(float(x), float(y), float(z));
}
array_view<float_3, 3> srcView(depth, height, width, srcHost);
array_view<float_3, 3> dstView(depth, height, width, dstHost);
parallel_for_each(
dstView.extent,
[=](index<3> idx) restrict(amp)
{
const auto globalx = idx[2];
const auto globaly = idx[1];
const auto globalz = idx[0];
auto temp = srcView[idx];
if (globaly == 0)
{
temp += 0.5f;
}
if (globalz == 0)
{
temp *= -1;
}
dstView[idx] = temp;
});
dstView.synchronize();
for (int z = 0; z < depth; ++z)
for (int y = 0; y < height; ++y)
for (int x = 0; x < width; ++x)
{
const auto val = dstHost[z * height * width + y * width + x];
printf("[%d][%d][%d] = (%.1f, %.1f, %.1f)\n", z, y, x, val.x, val.y, val.z);
}
}
関連項目
参照
- ^ C++ AMP (C++ Accelerated Massive Parallelism)
- ^ 4Gamer.net ― 見えてきたAMDの次世代GPUアーキテクチャ。なぜAMDはVLIWを捨てるのか
- ^ MicrosoftがC++ AMP仕様を公開し、データ並列処理の障壁を下げる意向
- ^ Graphics (C++ AMP) | Microsoft Learn
- ^ Texture Copy Improvements in C++ AMP with Visual Studio 2013 - Parallel Programming in Native Code - Site Home - MSDN Blogs
- ^ C++ AMP Open Spec V1.2 Published - Parallel Programming in Native Code - Site Home - MSDN Blogs
- ^ C++ AMP Overview | Microsoft Learn
- ^ accelerator Class
- ^ AMDとMS,GPU演算用途向けのコンパイラ「C++ AMP v1.2」を発表 - 4Gamer.net
- ^ RadeonOpenCompute/hcc: HCC is an Open Source, Optimizing C++ Compiler for Heterogeneous Compute currently for the ROCm GPU Computing Platform
- ^ SPIR - The first open standard intermediate language for parallel compute and graphics
- ^ HSA Developer Tools - HSA Foundation
- ^ C++ AMP Overview
- ^ Using accelerator and accelerator_view Objects
外部リンク
- C++ AMP (C++ Accelerated Massive Parallelism) - MSDN (英語)
- multicoreware / hcc / wiki / Home — Bitbucket - オープン実装のC++ AMPコンパイラ
CAMP
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2024/05/29 14:50 UTC 版)
CAMP
- 環状アデノシン一リン酸(Cyclic adenosine monophosphate、cAMP)の略。
- カテリシジン(Cathelicidin antimicrobial peptide)の略
- CAMP試験 - 細菌の溶血性を調べる検査。
- CAMP (doaのアルバム)
- CAMP (イベント) - トークイベントが中心のイベント。
関連項目
キャンプ (曖昧さ回避)
キャンプ (camp)
一般概念
- 軍隊の遠征軍(自国から離れて他国を攻撃、侵略する軍)が野外でテントなどを設置して寝泊まりする場所(ローマ帝国の軍であれペルシア帝国軍であれ、軍が遠征(他国を侵略)する場合はテントを張って寝泊まりした)。
- スポーツのチームを軍隊のように見立てて、チームの本拠地から離れた合宿所あるいは合宿。これも野外生活を全然しておらず、鉄筋コンクリート製などの建物の中で生活している。
- 囚人などを(都市などから)隔離して生活させる場所。詳細は「強制収容所」を参照
- 美学に関する概念詳細は「キャンプ (様式) 」を参照
- キャンプ (ゲーム)
- 大韓民国大統領選挙において、候補者が政治家や官僚、学者、企業、メディアから人材を集めて選挙戦略や政策を練る選挙陣営のこと。当選すれば、そのままキャンプの人材が新政権の要職に就くため、キャンプ入りは立身出世の大きなチャンスとなる。
固有の名称
- コリーン・キャンプ - アメリカの女優。
- ショーン・キャンプ - アメリカの野球選手。
- L・スプレイグ・ディ・キャンプ - アメリカのファンタジー作家、SF作家。
- リー・キャンプ - イギリスのサッカー選手。
- アメリカ合衆国テキサス州の郡。詳細は「キャンプ郡 (テキサス州)」を参照
- フォークランド諸島において中心地スタンリー以外の地域を指す表現。詳細は「キャンプ (フォークランド諸島)」を参照
- 芸能事務所のひとつ。井上陽水の個人事務所。
- 東京都江東区にある出版編集社。DIY雑誌「ドゥーパ!」の企画編集などを行う。
関連項目
Weblioに収録されているすべての辞書からC AMPを検索する場合は、下記のリンクをクリックしてください。

「C AMP」に関係したコラム
-
個人投資家が株式投資を行う場合、証券会社を通じて株式売買を行うのが一般的です。証券会社は、株式などの有価証券の売買をはじめ、店頭デリバティブ取引や有価証券の管理を主な業務としています。日本国内の証券会...
- C AMPのページへのリンク