реклама на сайте
подробности

 
 
> TMS320c6678 и многоядерность, Как раскидать задачи на разные ядра ?
Digi
сообщение Dec 23 2013, 11:12
Сообщение #1


Частый гость
**

Группа: Свой
Сообщений: 150
Регистрация: 20-08-04
Пользователь №: 529



Не могу понять, как в один *.out файл поместить програмные модули, которые должны работать в разных ядрах.
И вообще я еще не понял принцип работы программы в многоядерном процессоре. Я понял я так: К примеру Ядро 0 выполняет задачи передачи данных, обобщение результатов вычислений. Ядра 1-4 вычисляют принятые во внутреннюю память данные и укладывают туда же результаты. Связь между ядрами осуществялется через внутренюю память.
Это правильно или как то иначе ?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Hoodwin
сообщение Dec 24 2013, 16:23
Сообщение #2


Знающий
****

Группа: Участник
Сообщений: 881
Регистрация: 21-03-10
Из: _// \\_
Пользователь №: 56 107



Ну, еще бывают кольцевые очереди (FIFO), через которые можно сообщения слать из одного ядра в другое через общую память. Главная фича FIFO, в отличие от связанных списков списков и spinlock-ов, в том, что они гарантируют корректную работу очередей при асинхронном взаимодействии ядер, без спец. команд типа compare and exchange. Ну и операции с FIFO атомарные, O(1).
Go to the top of the page
 
+Quote Post
AndrewN
сообщение Dec 27 2013, 00:34
Сообщение #3


Местный
***

Группа: Участник
Сообщений: 336
Регистрация: 7-03-07
Из: Петербург
Пользователь №: 25 961



QUOTE (Hoodwin @ Dec 24 2013, 20:23) *
FIFO, в отличие от связанных списков
Ну-ну. FIFO и есть связанный список. Какие отличия???
QUOTE (Hoodwin @ Dec 24 2013, 20:23) *
FIFO [...] гарантируют корректную работу очередей при асинхронном взаимодействии ядер, без спец. команд
Ничего FIFO не гарантирует, синхронизацию доступа надо аппаратными средствами осуществлять, причем в 667х эти средства есть.
QUOTE (Hoodwin @ Dec 24 2013, 20:23) *
операции с FIFO атомарные, O(1)
Экие у вас странные представления о необходимых и достаточных условиях. Из О(1) вовсе не следует атомарность, этот термин для других целей используется.
QUOTE (Hoodwin @ Dec 25 2013, 21:08) *
Формально двусвязный список тоже можно считать очередью (FIFO)
Формально никакая это не очередь, а именно двусвязный список. Очереди вторая связь совершенна не нужна. В n-арном дереве тоже можно найти подграфы, которые можно очередями считать.
QUOTE (jcxz @ Dec 26 2013, 20:40) *
Для взаимодействия ядер я вообще не использовал критических секций. Да, с помощью прерываний и общей памяти их можно организовать, но я не использовал их.
Просто повезло. Не вляпались в ситуацию, когда оба процесса одновременно искалечат индексы первого и последнего элементов очереди. Это же элементарно и называется оверран.


QUOTE (Digi @ Dec 23 2013, 15:12) *
Не могу понять, как в один *.out файл поместить програмные модули, которые должны работать в разных ядрах.
Что бы долго не думать, я собираю несколько исполняемых файлов. В максимуме - восемь.
Go to the top of the page
 
+Quote Post
jcxz
сообщение Dec 27 2013, 04:09
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(AndrewN @ Dec 27 2013, 06:34) *
Просто повезло. Не вляпались в ситуацию, когда оба процесса одновременно искалечат индексы первого и последнего элементов очереди. Это же элементарно и называется оверран.

Причём тут везение и какие индексы в очереди? Очереди у меня безиндексные - они там не нужны, это не массив.
И искалечить процессы (или процессоры) ничего не могут в принципе, если у вас правильно построены очереди и алгоритм работы с ними.
В очереди есть два указателя: один - позиция записи, другой - позиция чтения.
У каждой очереди есть пишущий процесс (процессор) и читающий процесс (процессор). У очереди может быть ТОЛЬКО ОДИН пишущий процесс (CPU) и ТОЛЬКО ОДИН читающий процесс (CPU).
В процессе записи модифицируется ТОЛЬКО указатель записи, указатель чтения при этом используется только как read-only.
В процессе чтения модифицируется ТОЛЬКО указатель чтения, указатель записи при этом используется только как read-only.
Таким образом - каждый из указателей модифицирует только свой процесс (CPU) и другой процесс (CPU) его использует только на чтение.
Такой алгоритм работы очередей позволяет не использовать критические секции (сериализацию доступа к ресурсу), что очень ценно для межъядерного взаимодействия.
Да, конечно, операция модификации (записи) указателя очереди должна быть атомарной, но это не проблема в любом CPU.

PS: А чтобы не "вляпываться в ситуации", надо продумывать алгоритм, а не рассчитывать на везение sm.gif
Go to the top of the page
 
+Quote Post
AndrewN
сообщение Dec 27 2013, 16:31
Сообщение #5


Местный
***

Группа: Участник
Сообщений: 336
Регистрация: 7-03-07
Из: Петербург
Пользователь №: 25 961



QUOTE (jcxz @ Dec 27 2013, 07:09) *
Причём тут везение и какие индексы в очереди?
Везение при том, что алгоритм вы описали неубедительный. Первый оверран испортит ваш кольцевой буфер, а вы и не заметите.
Индексы (или указатели, различия малы) применяются в кольцевых буферах для указания начала и конца очереди.
QUOTE (jcxz @ Dec 27 2013, 07:09) *
Да, конечно, операция модификации (записи) указателя очереди должна быть атомарной, но это не проблема в любом CPU.
Это и есть синхронизация. Только кто же эту атомарность-то обеспечит? Какой механизм вы используете? В некоторых (далеко не во всех) ЦПУ есть аппаратные атомарные операции, а в остальных - это проблема...
QUOTE (Hoodwin @ Dec 27 2013, 11:00) *
атомарной операцией (то есть не зависящей от состояния структуры) является вставка и удаление
Еще раз - атомарная операция - это совершенно другое. И весь ваш способ работы с FIFO, если он явно не использует атомарные (в смысле истинного определения) операции - опасен и ошибочен.
QUOTE (Hoodwin @ Dec 27 2013, 11:00) *
Вы можете осуществлять синхронизацию любыми способами, которые сочтете удобными. На мой вкус FIFO удобнее.
Ещё раз - FIFO не способ синхронизации. FIFO - способ организации данных.

Больше того, не просто так появился аппаратный IPC контроллер. Он-то и осуществляет алгоритм межпроцессорной синхронизации.

2), 3) - всё без исключения ложь. Когда вляпаетесь, не говорите, что мол, наколдовал.

Вообще говоря, мне не хочется подменять собой учебники. В учебниках говорится про синхронизацию и буферизацию и чем они отличаются.
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 14th August 2025 - 01:39
Рейтинг@Mail.ru


Страница сгенерированна за 0.01401 секунд с 7
ELECTRONIX ©2004-2016