BRT: Brook Runtime Library

Home
Introduction
Forums
Getting Started
Language
Architecture
    BRCC
    BRT
    BRT C++
Current Issues
Research
Sponsors

Code Transformations

The brcc compiler transforms declarations of streams and iterators, as well
as definitions of kernels into calls into the brook runtime API. The following
examples demonstrate the transformations peformed on each language construct.

Stream Declarations

Input
	float<extent1, extent2, ...> s;

Output
	__BRTStream s(__BRTFLOAT, extent1, extent2, ..., -1);

Iterator Declarations

Input
	iter float<extent> i = iter( min, max );
	iter float2<extentY, extentX> i2 = iter( float2(minX, minY), float2(maxX, maxY) );

Output
	__BRTIter i(__BRTFLOAT, extent, -1, min, max, -1 );
	__BRTIter i2(__BRTFLOAT2, extentY, extentX, -1, minX, minY, maxX, maxY, -1 );

Kernel Definitions

Input
	kernel void foo(
		float2 a<>, // stream input
		float3 b[][], // gather input
		float4 c, // constant input
		iter float d<>, // iterator input
		out float2 e<> // stream output
		)
	{ ... }

Output
	static void foo(
			const __BRTStream& a,
			const __BRTStream& b,
			const float4& c,
			const __BRTIter& d,
			const __BRTStream& e ) {
		static const void *__foo_fp[] = {
			"fp30", __foo_fp30,
			"ps20", __foo_ps30,
			"cpu", (void *) __foo_cpu,
			NULL, NULL };
		static __BRTKernel k(__foo_fp);

		k->PushStream(a);
		k->PushGather(b);
		k->PushConstant(c);
		k->PushIter(d);
		k->PushOutput(e);
		k->Map();
	}

Reduction Definitions

Input
	reduce void bar(
		float2 input<>, // stream input
		float3 g[][], // gather input
		float4 c, // constant input
		reduce float2 result<> // stream output
		)
	{ ... }

Output
	// reduce to value version
	static void bar(
			const __BRTStream& input,
			const __BRTStream& g,
			const float4& c,
			const float2& result ) {
		static const void *__foo_fp[] = {...};
		static __BRTKernel k(__foo_fp);

		k->PushStream(input);
		k->PushGather(g);
		k->PushConstant(c);
		k->PushIter(d);
		k->PushReduce(&result, __BRTReductionType(&result));
		k->Reduce();
	}

	// reduce to stream version
	static void bar(
			const __BRTStream& input,
			const __BRTStream& g,
			const float4& c,
			const __BRTStream& result ) {
		static const void *__foo_fp[] = {...};
		static __BRTKernel k(__foo_fp);

		k->PushStream(input);
		k->PushGather(g);
		k->PushConstant(c);
		k->PushIter(d);
		k->PushReduce(&result, __BRTReductionType(&result));
		k->Reduce();
	}
  


SourceForge.net Logo The fly fishing flies featured on this web site can be purchased at The English Fly Fishing Shop