\n |
[ トップページ ]
[ ____CommandPrompt ]
[ ____JScript ]
[ ____MySQL ]
[ ____Cygwin ]
[ ____Java ]
[ ____Emacs ]
[ ____Make ]
[ ____Perl ]
[ ____Python ]
[ ____OpenGL ]
[ ____C# ]
[ ____StyleSheet ]
[ ____C++ ]
[ ____Winsock ]
[ ____Thread ]
[ ____VisualStudio ]
[ ____C ]
[ ____Win32API ]
[ ____Lua ]
[ ____PhotoShop ]
ヘッダ検索
■ 並列化
POINT
何を並列にすべきか考える
■ Data.の並列化
SAMPLE
画像変換の並列処理
DESC
処理する対象データを 小分けして処理を並列にする
画像のピクセル単位の処理が分りやすい例。
各ピクセルデータ間には依存関係がないため並列して処理ができる。
// 画像をモノクロに変換する
void funcTrd( void *ptr )
{
Data *w = (Data *)ptr;
unsigned int i;
unsigned char y;
/*
WARNING
1. unsigned でないと問題あり.
char *p = 0000 = 255 = 0x00010000
*/
unsigned char *p = (unsigned char *)(w->data);
//char *p = (char *)(w->data);
for( i=0; i< w->nr; i++ ){
y = 0.299f * (int)(p[2])
+ 0.587f * (int)(p[1])
+ 0.114f * (int)(p[0]);
p[0] = p[1] = p[2] = y;
p += sizeof(char) * 4;
}
}
int main( void )
{
int i, nr;
HANDLE trd[NRTRD];
Data w[NRTRD];
image_w img;
// 画像の読み込み
loadBmp( "test.bmp", &img );
nr = ( (img.w * img.h ) + (NRTRD - 1) ) / NRTRD;
for( i=0; i< NRTRD; i++ ){
w[i].id = i;
w[i].nr = nr;
w[i].data = ( (char*)(img.data)
+ i*nr*(sizeof(char)*4)
);
// 残り Pixel の調整
if ( i == NRTRD - 1) {
w[i].nr = (img.w * img.h) - nr*(NRTRD-1);
}
// Thread を作成して小分けしたデータを渡す
trd[i] = CreateThread( 0, 0,
(LPTHREAD_START_ROUTINE)funcTrd,
&(w[i]), 0, 0 );
}
WaitForMultipleObjects( NRTRD, trd, 1, INFINITE );
/* 画像の出力 */
writeBmp("test_mono.bmp", &img );
return 0;
}
|
金利比較.COM
|
NINJAIDX 14