nicity ([info]nicity) wrote,
@ 2008-08-08 02:27:00
Previous Entry  Add to memories!  Tell a Friend  Next Entry
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 :)



(Read 2 comments) - (Post a new comment)


[info]artmo
2008-08-08 06:53 pm UTC (link)
Это был я, да

(Reply to this)


(Read 2 comments) - (Post a new comment)

Create an Account
Forgot your login or password?
Login w/ OpenID
English • Español • Deutsch • Русский…