· Начало · Отвђтить · Статистика · Поиск · FAQ · Правила · Установки · Язык · Выход · WASM.RU · Noir.Ru ·

 WASM Phorum —› WASM.A&O —› Виртуализация потоков данных

. 1 . 2 . >>

Посл.отвђт Сообщенiе


Дата: Ноя 21, 2003 01:56:54

На мой взгляд идея описанная в книге Касперского очень привлекательна, но написана так что не дает полного представления когда это нужно применять. Кому нибудь уже доводилось такое делать? Как применить это?


Дата: Ноя 21, 2003 15:44:46

emergenter
Кстати, я вот вспоминаю твой первый пост на форуме. Я как раз и дал пример ВИРТУАЛИЗАЦИИ ПОТОКОВ :))


Дата: Ноя 21, 2003 21:46:24

А можно еще разочек??


Дата: Ноя 22, 2003 12:23:31

emergenter
Неа :)))
Только на примере.


Дата: Ноя 24, 2003 01:28:25

да КЛАССНАЯ штука!! Разобрался!!! Только почему так... ??? кто ответит?? Сдела вообще элементарный пример сложение все элементов большого массива. И скорость при 12 потоков в 2 раза быстрее. КРУТО!!!!


Дата: Ноя 24, 2003 01:39:20

но это тоже самое что и разворот цикла ведь так?


Дата: Ноя 24, 2003 03:13:54

emergenter
Закинь пожалуйста свой пример на форум, а то меня тоже заинтересовало что это такое.


Дата: Ноя 24, 2003 12:58:30

emergenter
И да, и нет. Скажем как в математике: условие достаточное, но необходимое.


Дата: Ноя 24, 2003 22:30:13

Black_mirror
Да я сделал для эксперимента вообще простой пример!! СЛОЖЕНИЕ ВСЕХ элементов МАССИВА.
int *mas1;
mas1 = new int[10000];
for(i=0; i<10000; i++)
{
mas1[i]=i;
}

//не оптимизированный ВАРИАНТ
for(a=0; a<10000; a+=1) // где b число потоков
{
for(b=0; b<1; b++)
{
x+=mas1[b]
}
}

//ОПТИМИЗИРОВАННЫЙ ВАРИАНТ
for(a=0; a<10000; a+=4) // где b число потоков ШАГ +4
{
for(b=0; b<4; b++) // 4 потока
{
x+=mas1[b]
}
}


Дата: Ноя 24, 2003 23:08:55 · Поправил: emergenter

Edmond
А вот если взять пример по-сложнее!! Я тут даже не знаю как лучше. К примеру
per = от 75 до 100;

per1=peremennay; //peremennay - вычисляются

int constanta=1500;
for(a=0; a<5000; a++)
{
per2=(constanta-per2)&1023;

for(i=0; i<per; i++)
{
sum=mas1[per1]*mas2[per2];
}
mas3[a]=sum;
per2+=100;
}


Дата: Ноя 25, 2003 05:59:57 · Поправил: Black_mirror

emergenter
Я не вижу здесь суммирования всех элементов массива. В первом случае мы 10000 раз суммируем первый элемент, а вот втором 2500 раз первые четыре. Программа работает не правильно, поэтому о каком увеличении производительности может идти речь?


Дата: Ноя 25, 2003 07:27:08 · Поправил: emergenter

Black_mirror
Да это верно!!!! блин! но я делал по книге...


Дата: Ноя 25, 2003 07:27:27

Edmond
Что скажешь?


Дата: Ноя 25, 2003 08:23:37

emergenter
А можно описать саму идею? Может тогда я пойму как это должно было выглядеть.


Дата: Ноя 25, 2003 10:02:25 · Поправил: emergenter

Black_mirror
Я немного ошибся но идея такая!!!
Есть массив mas1[10000] типа int.
В книге Предлагается сделать следующее (коментарии взяты от туда)
//НЕ ОПТИМИЗИРОВАННЫЙ
for(a=0; a<10000; a+=sizeof(int))
{
for(b=0;b<r; b++)
{
x+=p[b]+a;
//перебор всех потоков один за другим, причем, как легко
//убедится, ячейки всех потоков находятся в различных
//страницах DRAM, поятому при обработке более четырех
//потоков DRAM-страницы будут постоянно
//закрываться/открываться снижая тем самым
//производительность
}
}

где r - количество потоков!!!

//ОПТИМИЗТРОВАННЫЙ ВАРИАНТ
for(a=0; a<10000*r; a+=(sizeof(int)*r))
//что изменилось? - шаг приращения
//теперь равен количеству виртуальных потоков

{
for(b=0;b<r; b++)
{
x+=*(int*)((int)p+a+b*sizeof(int));
//теперь ячейки всех потоков расположены рядом
//поэтому время обработки минимально
}
}

. 1 . 2 . >>


Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.122