きままにブログ

プログラミングを主とした私のメモ帳です。寂しいのでコメントください笑

C++AMP

お久し振りです。しばらくプログラムを書いていなかったのですが、VisualStudio 2015 RCも出たことでC++を書いています。今回はC++AMPを触ってみました。

特定の行列のなかの部分行列にアクセスし、GPUで演算を行うものをC++AMPを使って書いたものです。処理速度はともかく、とても簡素な記述でGPUに対して処理できるのでとても便利ですね。

#include <iostream>
#include <amp.h>

int main() {
	using namespace concurrency;

	array_view<int, 2> av(3, 3);
	
	parallel_for_each(av.extent,
					  [av](index<2> i) restrict(amp) {
		av[i] += (i[0] + 1) * 10 + (i[1] + 1);
	});

	auto av_sub = av.section(index<2>(1, 0), extent<2>(2, 2));

	parallel_for_each(av_sub.extent,
					  [av_sub](index<2> i) restrict(amp) {
		av_sub[i] += 100;
	});

	for (int i = 0; i < 3; ++i) {
		for (int j = 0; j < 3; ++j) {
			std::cout << av(i, j) << "\t";
		}
		std::cout << std::endl;
	}

	std::getchar();
	return 0;
}