| nicity ( @ 2008-08-08 02:27:00 |
| Entry tags: | hardcore c++ threadbuildingblocks |
Hardcore C++ with ThreadBuildingBlocks
Скачал С++ библиотеку для параллельного программирования ThreadBuildingBlocks, просматривая сорсы наткнулся на несколько совершенно замечательных на мой взгляд hardcore code pieces:
Специализация темплейта макросом
Генерация функций с ассемблером посредством макросов:
Сама библиотека предоставляет реализацию конкурентной таблицы, очереди, вестора, атомарных переменных, различных мьютексов, примитивов параллельной обработки.
Пример распараллеливания:
struct UpdateStressBody {
void operator()( const tbb::blocked_range& range ) const {
drawing_area drawing(0, range.begin(), UniverseWidth, range.end()-range.begin());
int i_end = range.end();
for( int y = 0, i=range.begin(); i!=i_end; ++i,y++ ) {
drawing.set_pos(1, y);
#pragma ivdep
for( int j=1; j<UniverseWidth-1; ++j ) {
S[i][j] += M[i][j]*(V[i][j+1]-V[i][j]);
T[i][j] += M[i][j]*(V[i+1][j]-V[i][j]);
int index = (int)(V[i][j]*(ColorMapSize/2)) + ColorMapSize/2;
if( index<0 ) index = 0;
if( index>=ColorMapSize ) index = ColorMapSize-1;
color_t* c = ColorMap[Material[i][j]];
drawing.put_pixel(c[index]);
}
}
}
};
static void ParallelUpdateStress() {
tbb::parallel_for( tbb::blocked_range( 1, UniverseHeight-1 ), // Index space for loop
UpdateStressBody(), // Body of loop
Affinity ); // Affinity hint
}
Btw, В Java 6 есть аналоги для всей функциональности кроме распараллеливания, ждём Java 7 :)