28 julho, 2013 0 Comentários AUTOR: elemarjr CATEGORIAS: Sem categoria Tags:,

Introdução a Tiling com C++ AMP - Parte 3 - tiled_index

Tempo de leitura: 1 minuto

Olá. Tudo certo?

No post anterior, tratei da classe tiled_extent. Ela é responsável por "particionar" uma extent em pequenos blocos, chamados tiles. Hoje, falaremos sobre outro componente importante para utilização de tiling com C++ AMP: tiled_index.

Um novo parallel_for_each

A função parallel_for_each fornece uma sobrecarga que espera por uma tiled_extent. Junto ela introduz uma nova classe para o indexador- tiled_index:

#include <amp.h>
#include <vector>

using namespace concurrency;

int main()
{
	float seed = 10.0;
	std::vector<float> v(seed, 12);

	extent<2> e(4, 4);
	array_view<float, 2> av(e, v);

	tiled_extent<2, 2> te = e.tile<2, 2>();

	parallel_for_each(te, [=](tiled_index<2> t_idx) restrict (amp) {
		//
	});
}

O parâmetro para o template corresponde ao número de dimensões que está especificado na tiled_extent.

Sobre a tiled_index

tiled_index tem propriedades que fornecem informações de índice considerando a tile que está sendo processada. Ela tem propriedades para indicar os índices correspondentes ao extent global e, outras, para  indicar índice no tile.

Vamos passear por cada uma dessas propriedades.

global

A primeira propriedade que precisamos conhecer é a propriedade global. Ela tem informações, em objeto da classe index, quanto a posição global (dahn?!) da thread no array. Considerando o código de exemplo desse post, teríamos:

tiled_4x4_global

 

Pegou a idéia?

local

A propriedade local tem informações, em um objeto index, correspondendo ao posicionamento na thread na tile que a contém.

tiled_4x4_local

 

tile

A propriedade tile tem informações, em um objeto index, correspondendo ao índice do tile (dahn?!) ao qual a thread pertence.

tiled_4x4_tile

tile_origin

A propriedade tile_origin corresponde ao índice global da thread base (origem) da tile sendo processada.

tiled_4x4__tileorigin

 

A utilidade de tiled_index

As informações para tiled_index são fundamentais para implementação de algoritmos que usem tiling. Por agora, sabemos que podemos continuar implementando os algoritmos simples (sem tiling) fazendo uso apenas da propriedade global.

Era isso.