Forth
http://fforum.winglion.ru/

Multi-threading для софт-процессора
http://fforum.winglion.ru/viewtopic.php?f=3&t=2606
Страница 3 из 5

Автор:  WingLion [ Сб май 29, 2010 15:53 ]
Заголовок сообщения:  Re: Multi-threading для софт-процессора

DDR - это, как раз, тот самый медведь, который не то что не убит...
его даже еще не выследили в лесу... и еще неизвестно, а есть ли он там?

Автор:  WingLion [ Сб май 29, 2010 15:55 ]
Заголовок сообщения:  Re: Multi-threading для софт-процессора

mOleg писал(а):
огда это не имеет смысла, лучше каждому дать свою память


Ее попросту не хватит, потому и хочется пускать ядра на одной памяти с одним общим кодом (ядро форта, формально не должно меняться в процессе работы программы, и его можно обобщить, а вот личные данные ядер - надо разделять)

К личным данным надо относить изменяемую часть форт-кода, переменные (фактически все!), обрабатываемые данные и т.д. и т.п.

Автор:  mOleg [ Сб май 29, 2010 15:57 ]
Заголовок сообщения:  Re: Multi-threading для софт-процессора

WingLion писал(а):
а вот личные данные ядер - надо разделять

мндя, а зачем?

Автор:  WingLion [ Сб май 29, 2010 15:58 ]
Заголовок сообщения:  Re: Multi-threading для софт-процессора

mOleg писал(а):
мндя, а зачем?


Чтобы разные ядра друг другу не мешали.

Автор:  mOleg [ Сб май 29, 2010 16:10 ]
Заголовок сообщения:  Re: Multi-threading для софт-процессора

WingLion писал(а):
Чтобы разные ядра друг другу не мешали.

а с чего они будут мешать?

Автор:  Hishnik [ Сб май 29, 2010 16:23 ]
Заголовок сообщения:  Re: Multi-threading для софт-процессора

mOleg писал(а):
HDL нет, а вот в виде алгоритма можно.
кстати, тут надо оговориться, нужно ли действительно всем процессорам одновременно запускаться (возможно более удачный вариант - запуск одного, инициализация системы (Загрузка кода, инициализация перифирии, распределение памяти), и принудительный запуск остальных процессоров с конкретными задачами для них. Т.е. речь об иерархической системе.

А вот это все как? :) Особенно "распределение памяти" - аппаратно, что ли?
mOleg писал(а):
что же до алгоритма. То должна существовать ячейка памяти X


Код:
if clk'event and clk = '1' then
  if resetA = '1' then ipA <= 0; end if;
  if resetB = '1' then ipB <= 5; end if;


То есть вот это сложнее?
mOleg писал(а):
после этого код выполняет только один процессор (сколько бы других ни было)

Да-да. Схема стала в два раза больше, чтобы работала только ее половина...
mOleg писал(а):
кстати, а не получится, что память начнет сильно тормозить?
ведь скорее всего адреса будут у разных процов разные (т.е. в разных страницах), а это по нескольку дополнительных тактов на доступ???

Причем выше неоднократно отмечалось, что речь о накристальной статической памяти, которая у Xilinx еще и не имеет латентности...

Автор:  Hishnik [ Сб май 29, 2010 16:29 ]
Заголовок сообщения:  Re: Multi-threading для софт-процессора

mOleg писал(а):
дело в том, что объекты синхронизации придется всеравно делать, раз уж память общаяя. Тот же HERE надо будет трогать монопольно только одному процессору за раз (к примеру).

А какой такой HERE окажется в памяти целевой системы при кросс-компиляции? Кстати говоря, я уже писал, что двупортовая память самостоятельно разрешает аппаратные конфликты при доступе к одной и той же ячейке.

Автор:  mOleg [ Сб май 29, 2010 16:36 ]
Заголовок сообщения:  Re: Multi-threading для софт-процессора

Хищник писал(а):
Особенно "распределение памяти" - аппаратно, что ли?

нет, это сделает первый проц, а потом запустит другие, которым будут уже "розданы карты"

Хищник писал(а):
То есть вот это сложнее?

а то!
ведь не все знают HDL, не так ли?

Хищник писал(а):
ричем выше неоднократно отмечалось, что речь о накристальной статической памяти, которая у Xilinx еще и не имеет латентности...

не один Хищник читает через строку ;)

Автор:  mOleg [ Сб май 29, 2010 16:42 ]
Заголовок сообщения:  Re: Multi-threading для софт-процессора

Хищник писал(а):
А какой такой HERE окажется в памяти целевой системы при кросс-компиляции?

ну, вот и Хищник читает через сообщение 8)
я для примера привел HERE (хотя, вы бы придрались к любому другому примеру по-любому)

Хищник писал(а):
Да-да. Схема стала в два раза больше, чтобы работала только ее половина...

дедлоки в помощь!

Автор:  Hishnik [ Сб май 29, 2010 16:49 ]
Заголовок сообщения:  Re: Multi-threading для софт-процессора

mOleg писал(а):
нет, это сделает первый проц, а потом запустит другие, которым будут уже "розданы карты"

То есть второй и последующие процессоры должны быть из другого теста и управляться строго программно?
mOleg писал(а):
а то!
ведь не все знают HDL, не так ли?

А зачем тогда спорить по вопросу, о котором нет достаточных знаний?
mOleg писал(а):
Хищник писал(а):
Да-да. Схема стала в два раза больше, чтобы работала только ее половина...

дедлоки в помощь!

Не надо применять отвлеченные рассуждения для анализа поведения схемы, построенной по другим принципам. Синхронизация нужна при наличии возможности получить электрический конфликт. Если такой возможности нет, то и ожидать второе ядро незачем. А значит, никаких взаимных блокировок и не будет, если только специально их не написать, из вредности.

Автор:  WingLion [ Сб май 29, 2010 17:12 ]
Заголовок сообщения:  Re: Multi-threading для софт-процессора

mOleg писал(а):
а с чего они будут мешать?


Совершенно ясно, что мешать они могут только сдуру...
Либо у программера крыша съехала, либо у программы им написанной...

Если же ни того, ни другого не наблюдается, то процессы (aka ядра процессора) должны уважать друг друга и в чужие данные без надобности не лазить. А вот для этого надо сначала определиться, где чьи данные, т.е. провести разделение общего адресного пространства...

Автор:  Hishnik [ Вс май 30, 2010 14:59 ]
Заголовок сообщения:  Re: Multi-threading для софт-процессора

WingLion писал(а):
К личным данным надо относить изменяемую часть форт-кода, переменные (фактически все!), обрабатываемые данные и т.д. и т.п.

А вот не факт, что эти данные при размещении в одном адресном пространстве будут подвергаться несанкционированным изменениям.

Код:
CREATE X[] 1000 CELLS ALLOT

: SUM-ARRAY1
  0
  500 0 DO
    X[] I -TH @ +
  LOOP
;

: SUM-ARRAY2
  0
  1000 500 DO
    X[] I -TH @ +
  LOOP
;

VARIABLE SUM2

: MAIN1  \ точка старта первого ядра
  SUM-ARRAY1
  SUM2 @ +
\ теперь на стеке первого ядра сумма элементов массива X[]
;

: MAIN2  \ точка старта второго ядра
  SUM-ARRAY2
  SUM2 !
;


Массив в общем доступе, переменная SUM2 тоже. Другое дело, что оба ядра "договорились", что не будут портить друг другу жизнь. Но я потому и писал о multithreading (а не multitasking), что по сути программа-то одна, только исполняется в два потока. Вот тут получился двукратный прирост производительности, поскольку ядра посчитали по половинке массива.

А вообще, про память данных ничего не конкретизировалось. Речь шла об общей памяти программ, а память данных можно как обобщать, так и делать раздельной для ядер.

Автор:  WingLion [ Вс май 30, 2010 20:05 ]
Заголовок сообщения:  Re: Multi-threading для софт-процессора

Надо все-таки подходить творчески к подобному разделению.

Если два ядра работают над одной задачей, ясен пень, что у них данные общие.
А у разных-то задач данные всяко должны быть разделены.

Автор:  Hishnik [ Вс май 30, 2010 20:10 ]
Заголовок сообщения:  Re: Multi-threading для софт-процессора

WingLion писал(а):
Если два ядра работают над одной задачей, ясен пень, что у них данные общие.
А у разных-то задач данные всяко должны быть разделены.

Multithreading - это "много нитей". Это и есть работа над одной задачей. Тут как раз и будет полезен совместный доступ к коду.

Автор:  WingLion [ Вс май 30, 2010 21:51 ]
Заголовок сообщения:  Re: Multi-threading для софт-процессора

просто повторюсь...

WingLion писал(а):
Надо все-таки подходить творчески к подобному разделению.

Страница 3 из 5 Часовой пояс: UTC + 3 часа [ Летнее время ]
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/