vadimuzzz 0 23 марта, 2010 Опубликовано 23 марта, 2010 · Жалоба с одним максимумом все вроде понятно: например, n-1 компараторов, если в массиве n элементов, можно конвейерами порезать. а как быть если надо, скажем 3 максимальных значения? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
iosifk 3 23 марта, 2010 Опубликовано 23 марта, 2010 · Жалоба с одним максимумом все вроде понятно: например, n-1 компараторов, если в массиве n элементов, можно конвейерами порезать. а как быть если надо, скажем 3 максимальных значения? Ну так и в чем же проблема? Ставим 3 схемы проверки. Если число больше первого, то оно заменяет первое и проходит на следующее сравнение. Если больше второго, то заменяет второе и проходит на третье сравнение. Итого при последовательном переборе чисел добавляются еще пара тактов для "проталкивания числа "вверх"". При этом я понимаю, что проверки идут по одному числу. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
des00 25 23 марта, 2010 Опубликовано 23 марта, 2010 · Жалоба Ну так и в чем же проблема? Ставим 3 схемы проверки. Если число больше первого, то оно заменяет первое и проходит на следующее сравнение. Если больше второго, то заменяет второе и проходит на третье сравнение. Итого при последовательном переборе чисел добавляются еще пара тактов для "проталкивания числа "вверх"". При этом я понимаю, что проверки идут по одному числу. кстати простой, однотактный код такой штуки приводился на этом форуме %) в теме про сортировку по возрастанию/убыванию %) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
bogaev_roman 0 23 марта, 2010 Опубликовано 23 марта, 2010 · Жалоба ну или в лоб три раза прогнать по одной схеме, просто после нахождения максимума и его номера в массиве сохранять это значение в отдельном регистре, а на его место тупо ставить 0. Конкретизируйте задачу Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
des00 25 23 марта, 2010 Опубликовано 23 марта, 2010 · Жалоба ну или в лоб три раза прогнать по одной схеме, просто после нахождения максимума и его номера в массиве сохранять это значение в отдельном регистре, а на его место тупо ставить 0. отсортировать по возрастанию, за один проход. и не париться %) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
vadimuzzz 0 23 марта, 2010 Опубликовано 23 марта, 2010 · Жалоба посмотрел тему, про которую говорил des00, там как я понял примерно то же, что имел в виду iosifk. у меня немного не то (хотя, м.б. я сам себе проблему создал). данные читаются не последовательно, а сразу есть, скажем 32 отсчета (на портах). требуется за минимальное количество тактов (при этом не в ущерб Fmax) найти 3 максимума. перебирать элементы по одному неохота Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Oldring 0 23 марта, 2010 Опубликовано 23 марта, 2010 · Жалоба посмотрел тему, про которую говорил des00, там как я понял примерно то же, что имел в виду iosifk. у меня немного не то (хотя, м.б. я сам себе проблему создал). данные читаются не последовательно, а сразу есть, скажем 32 отсчета (на портах). требуется за минимальное количество тактов (при этом не в ущерб Fmax) найти 3 максимума. перебирать элементы по одному неохота Написать полную сортирующую схему, взять три старших значения результата и позволить синтезатору самостоятельно выкинуть всё остальное? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
iosifk 3 23 марта, 2010 Опубликовано 23 марта, 2010 · Жалоба а сразу есть, скажем 32 отсчета (на портах). Это что же более 200 - 400 пинов одновременно сравнивать? А скажем рассогласование приходов сигналов учитывается? А еще и CDC??? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
vadimuzzz 0 23 марта, 2010 Опубликовано 23 марта, 2010 · Жалоба Это что же более 200 - 400 пинов одновременно сравнивать? А скажем рассогласование приходов сигналов учитывается? А еще и CDC??? нет, сигналы все внутри. собственно я немного наврал, последовательное чтение все-таки будет, но скорее всего в несколько потоков одновременно (несколько банков памяти). вот и не хотелось к контроллеру памяти логику наворачивать. 2Oldring:вариант с полной сортировкой может и приемлем, но я не знаю алгоритмов, которые хорошо параллелятся. не просветите? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Serhiy_UA 1 23 марта, 2010 Опубликовано 23 марта, 2010 · Жалоба ...перебирать элементы по одному неохота Еще в студенчестве был курс "Специализированные вычислительные машины", а там был раздел по ассоциативным вычислителям. А в них работа со всеми данными сразу, правда, по одному биту в такт от каждого данного. Здесь можно высоко поднять тактовую частоту. Возможно, задача в самый раз для такого вычислителя. Но, как всегда, правильная постановка задачи - половина ее решения, а задача не ясна... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
des00 25 23 марта, 2010 Опубликовано 23 марта, 2010 · Жалоба нет, сигналы все внутри. собственно я немного наврал, последовательное чтение все-таки будет, но скорее всего в несколько потоков одновременно (несколько банков памяти). вот и не хотелось к контроллеру памяти логику наворачивать. отсортировать потоки, потом составить массив из 3 результатов для каждого потока и еще раз отсортировать %) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
vadimuzzz 0 23 марта, 2010 Опубликовано 23 марта, 2010 · Жалоба отсортировать потоки, потом составить массив из 3 результатов для каждого потока и еще раз отсортировать %) а где гарантия, что все максимумы в одном потоке не окажутся? ой, сорри, невнимательно прочитал. да, это пойдет ) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
bogaev_roman 0 23 марта, 2010 Опубликовано 23 марта, 2010 · Жалоба В данном варианте смешанное решение будет, где-то потребуется вычислять максимум последовательно, где-то параллельно, кол-во уровней логики можно будет определить эксперементально. Можно вообще же все потоки разделить по 4 и выбрасывать минимальное значение на первых этапах (будут оставаться 3), а потом уже последовательно выбрать максимумы. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ViKo 1 23 марта, 2010 Опубликовано 23 марта, 2010 (изменено) · Жалоба данные читаются не последовательно, а сразу есть, скажем 32 отсчета (на портах). требуется за минимальное количество тактов (при этом не в ущерб Fmax) найти 3 максимума. перебирать элементы по одному неохота Если пытаться сделать схему, параллельно сравнивающую все отсчеты между собой, никакой ПЛИС не хватит. 32 * 31 = 992 (с самим собой сравнивать не нужно). Или же разбить схему сравнения на несколько ступеней. Сначала - соседние сравнить (16 сравнений) , потом - те, что остались (8), потом ... (4) (2). И это только для одного результата. Остается - последовательно: Имеем 3 регистра. В первый заносим первый отсчет. Если следующий отсчет больше первого, заносим новый, а то, что было, передвигаем во второй. Если следующий отсчет больше второго, заносим его вместо второго, а то, что было, передвигаем в третий. И т.д., и т.п. p.s. первый расчет - неверный, маху дал. Пополам еще поделить. Изменено 23 марта, 2010 пользователем ViKo Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
vadimuzzz 0 23 марта, 2010 Опубликовано 23 марта, 2010 · Жалоба Или же разбить схему сравнения на несколько ступеней. Сначала - соседние сравнить (16 сравнений) , потом - те, что остались (8), потом ... (4) (2). И это только для одного результата. это я и имел в виду в первом посте, такая схема мне нравится, но не знаю как ее расширить на 3 макс. Остается - последовательно: Имеем 3 регистра. В первый заносим первый отсчет. Если следующий отсчет больше первого, заносим новый, а то, что было, передвигаем во второй. Если следующий отсчет больше второго, заносим его вместо второго, а то, что было, передвигаем в третий. И т.д., и т.п. мне не нравится слово "последовательно". 3-5 тактов - идеал Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться