⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 read_write_domain.br

📁 用于GPU通用计算的编程语言BrookGPU 0.4
💻 BR
字号:
// read_write_domain.br// confirm that streamRead and streamWrite// interact properly with domain#include <stdio.h>typedef struct Pair_t {	float field1;	float field2;} Pair;#define SIZE_X1 333#define START_X1 127#define END_X1 305#define DOMAIN_X1 (END_X1 - START_X1)#define SIZE_X2 427#define SIZE_Y2 987#define START_X2 0#define END_X2 199#define DOMAIN_X2 (END_X2 - START_X2)#define START_Y2 576#define END_Y2 987#define DOMAIN_Y2 (END_Y2 - START_Y2)kernel void clear2( out float2 result<> ) {	result = -1;}kernel void clearPair( out Pair result<> ) {	result.field1 = -1;	result.field2 = -1;}void check( const char* name, const char* dim, int xidx, int yidx, int expected, float actual ){	if( (float)expected == actual ) return;		printf("fail: %s[%d][%d].%s = %f, expected %d\n", name, yidx, xidx, dim, actual, expected );	exit(-1);}void check1( const char* name, const float2* data ){	int i;	int dx, dy;	for( i = 0; i < SIZE_X1; i++ )	{		dx = -1;		dy = -1;				if( i >= START_X1 && i < END_X1 )		{			dx = i - START_X1;			dy = i - START_X1;		}			check( name, "x", i, 0, dx, data[i].x );		check( name, "y", i, 0, dy, data[i].y );	}}void check2( const char* name, const float2* data ){	int i, j;	int dx, dy;	for( j = 0; j < SIZE_Y2; j++ )	for( i = 0; i < SIZE_X2; i++ )	{		dx = -1;		dy = -1;				if( i >= START_X2 && i < END_X2			&& j >= START_Y2 && j < END_Y2 )		{			dx = i - START_X2;			dy = j - START_Y2;		}		check( name, "x", i, j, dx, data[j*SIZE_X2+i].x );		check( name, "y", i, j, dy, data[j*SIZE_X2+i].y );	}}int main(){	int i, j;	float2 a1< SIZE_X1 >;	Pair b1< SIZE_X1 >;	float2 a2< SIZE_Y2, SIZE_X2 >;	Pair b2< SIZE_Y2, SIZE_X2 >;		float2* input1 = (float2*) malloc( DOMAIN_X1 * sizeof(float2) );	float2* input2 = (float2*) malloc( DOMAIN_Y2 * DOMAIN_X2 * sizeof(float2) );	float2* a1_data = (float2*) malloc( SIZE_X1 * sizeof(float2) );	float2* b1_data = (float2*) malloc( SIZE_X1 * sizeof(float2) );	float2* a2_data = (float2*) malloc( SIZE_Y2 * SIZE_X2 * sizeof(float2) );	float2* b2_data = (float2*) malloc( SIZE_Y2 * SIZE_X2 * sizeof(float2) );		for( i = 0; i < DOMAIN_X1; i++ )	{		input1[ i ].x = (float)i;		input1[ i ].y = (float)i;	}	for( j = 0; j < DOMAIN_Y2; j++ )	for( i = 0; i < DOMAIN_X2; i++ )	{		input2[ j*DOMAIN_X2 + i ].x = (float)i;		input2[ j*DOMAIN_X2 + i ].y = (float)j;	}		clear2( a1 );	clear2( a2 );		clearPair( b1 );	clearPair( b2 );		streamRead( a1.domain( START_X1, END_X1 ), input1 );	streamRead( b1.domain( START_X1, END_X1 ), input1 );	streamRead( a2.domain( int2( START_X2, START_Y2 ), int2( END_X2, END_Y2 ) ), input2 );	streamRead( b2.domain( int2( START_X2, START_Y2 ), int2( END_X2, END_Y2 ) ), input2 );		streamWrite( a1, a1_data );	streamWrite( b1, b1_data );	streamWrite( a2, a2_data );	streamWrite( b2, b2_data );		check1( "a1", a1_data );	check1( "b1", b1_data );	check2( "a2", a2_data );	check2( "b2", b2_data );	printf( "pass\n" );	return 0;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -