Меня всегда радовали методы, используемые ДЖыСиСятами для параллельных вычислений, и особенно примеры в презентациях:Этот цикл можно разогнать, хоть на 5 процессоров.
for ( i = 0; i < 5; i++)
S[i] = i;
---------------
Ну и тут, на 5 основных, каждый из которых так же по пять...
for ( i=0; i<5; i++ )
for (j=0; j < 5; j++ )
S[i][j] = S[i][j]+i*j;
Типа так (нулевой пропускаю)
k=1
for ( i = 0; j = k ; i < 5; i++ )
S[i][j] = S[i][j]*k; ;
--------
k=2
for ( i = 0; j = k ; i < 5; i++ )
S[i][j] = S[i][j]*k;
ну и так далее
k=Z
for ( i = 0; j = Z ; i < 5; i++ )
S[i][j] = S[i][j]*k;
-------
Я это к чему вообще!?
Да к тому, что все результаты этих циклов известны заранее.
И 50% из них легко реализуются на указателях
остальные на 49% на препроцессоре, с генерацией БОЛЬШОЙ int ARRAY[65535][65535]
И 1% код для анализа, в котором страшно распараллеливать, - либо глюкнет, либо запутаешься.
Более интересные вещи, это генерация функций, которые буду в последствии,
уже в моей программе, сами распараллеливать, в зависимости от аргументов.
Тут можно распараллелить максимум на 4, минимум 0.
if ( a < 5 )
S[i] = a;
if ( a > 25 )
S[i] = a-25;
if ( a < 5 || (S[i] - a) > 8 )
S[i-a] = 8-a;
if ( a > S[i] )
S[i] = a-25;
Можно, загнать в бинарник 4 функции, которые раздельно отработают. Нафига!?
Мне нужно, что б само параллелилось на 4 CPU, когда 6 < a < 8, на 2 СPU, когда 5 < a < 25
Вы скажите, ну тогда впиши эти условия в начале! Ладно! А если x < a < y :)