new123 0 8 июня, 2021 Опубликовано 8 июня, 2021 (изменено) · Жалоба 7 hours ago, novartis said: С помощью такой команды можно записать 32 байта за раз _mm256_storeu_si256 ради интереса, проверяли? Действительно так делает? я, к примеру, маплюсь на какой нить Bar из linux, записываю блок памяти на него, но он все равно потом блоками по 4 байта пишет. Можно вроде по 8, если Linux 64-битный, но тут уже проблема со стороны альтеровской корки пойдет, у меня не вышло по 8. Давно видел науйчную работу, что если нужно перекинуть до 64 байт по pcie, то быстрее будет по 4 байта так, чем DMA, а все что выше, только DMA 5 hours ago, AVR said: В таком случае, производительности будет более чем достаточно задачи, поток в ПЛИС менее 250 килобайт в секунду, не будет загрузки процессора более чем 1 процент, что приемлимо. я как то однажды epcq вывел на pcie через BAR )) И писал со стороны Linux по 4 байта. 32мб перегонял так ) Если слаков нет в проекте, то было это достаточно быстро. Но речь конечно не о секундах. Но когда все закешируется в проце на запись уходит по 50нс (тут еще зависит от того, чтобы проц не засыпал, выставить в Linux cpu perfomance и тд), проверено точно из самой плис, фиксировал там данные. Изменено 8 июня, 2021 пользователем new123 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
1891ВМ12Я 0 8 июня, 2021 Опубликовано 8 июня, 2021 · Жалоба 4 minutes ago, new123 said: Давно видел науйчную работу, что если нужно перекинуть до 64 байт по pcie, то быстрее будет по 4 байта так, чем DMA, а все что выше, только DMA Я сейчас делаю кое что на Nios+PCIE (так удобно было коллегам) и на Xilinx. Как сделать это на Xilinx без soft-cpu там понятно но не пробовал, там просто dma_sync_single_for_device и далее шлю адрес, устройство дает серию TLP на чтение с completion. Как это делать на Nios+PCIE совершенно непонятно. Но если скорость достаточная в теории, то даже если быстрее, есть еще критерий как проще и достаточно ли будет такого решения. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
new123 0 8 июня, 2021 Опубликовано 8 июня, 2021 (изменено) · Жалоба 8 minutes ago, AVR said: Как это делать на Nios+PCIE совершенно непонятно. Но если скорость достаточная в теории, то даже если быстрее, есть еще критерий как проще и достаточно ли будет такого решения. Как на nios, увы. Я этого зверя никогда не делал. Так в принципе вам уже один совет дали. Мой подход был таков: 1) Делаю в pcie корке любой доступный BAR (BAR0 обычно занят DMA движком, можно брать BAR1-BAR2). Ставлю ему нужный сайз. 2) На pcie появляется разделы. 3) Ну а дальше в линуксе дело техники. Либо его в своем драйвере подключаем и юзаем iowrite32 4) Либо, делаем map на файл вида /sys/bus/pci/devices/0000:02:00.0/resource2 (нужный адрес подставить самому) И пишем прям в него. Ну или читаем. upd. 5) Забыл самое главное написать ). После активации BAR1-2 в корке, появляется порт вида BAR2... или как то так. Типа Avalon. И сажаем на него, что душе угодно. Можно on_chip_memory к примеру, можно что нибудь свое и тд. Оно и появится в линуксе Изменено 8 июня, 2021 пользователем new123 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
novartis 0 8 июня, 2021 Опубликовано 8 июня, 2021 · Жалоба 4 hours ago, new123 said: ради интереса, проверяли? Действительно так делает? да, это рабочий вариант 4 hours ago, new123 said: Давно видел науйчную работу, что если нужно перекинуть до 64 байт по pcie, то быстрее будет по 4 байта так, чем DMA, а все что выше, только DMA Логично) Чтобы хосту записать в плис по pcie 64 байта, нужно отправить 16 TLP пакетов по 4 байта данных, пусть время между TLP пакетами 50нс-100 нс, значит на пересылку 64 байт уйдет 800нс-1600 нс. При дма будет так: хост записывает команду на старт дма, плис посылает TLP пакет на чтение 64 байт, хост отвечает одним TLP пакетом с 64 байтами данных. Где-то 1100 нс выйдет. 4 hours ago, AVR said: Как это делать на Nios+PCIE совершенно непонятно. Я так понимаю Nios+PCIE собраны в QSYS, у модуля PCIE есть порт Txs (Avalon Memory Mapped Slave), если в этот порт послать транзакцию на чтение данных, указать адрес (который неким образом соответствует адресу, переданному с хоста), указать burst (длину читаемых данных), то получится dma. Но у вас к PCIE подключен Nios, не знаю вроде не умеет ниос посылать burst транзакции, он обычными IO операциями по 4 байта оперирует, так что надо ставить dma контроллер, можно свой написать, подключить его к Txs параллельно ниосу. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
new123 0 9 июня, 2021 Опубликовано 9 июня, 2021 · Жалоба 11 hours ago, novartis said: Чтобы хосту записать в плис по pcie 64 байта, нужно отправить 16 TLP пакетов по 4 байта данных, пусть время между TLP пакетами 50нс-100 нс, значит на пересылку 64 байт уйдет 800нс-1600 нс. При дма будет так: хост записывает команду на старт дма, плис посылает TLP пакет на чтение 64 байт, хост отвечает одним TLP пакетом с 64 байтами данных. Где-то 1100 нс выйдет. спасибо, для меня нкжная инфа. А не подскажите, TLP всегда 4 байта? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
novartis 0 9 июня, 2021 Опубликовано 9 июня, 2021 · Жалоба 1 minute ago, new123 said: спасибо, для меня нкжная инфа. А не подскажите, TLP всегда 4 байта? нет. Почему вы такой вопрос задали?) TLP пакет содержит заголовок 16 байт и данные. Хост в простейшем случае может послать IO32 запрос на запись или на чтение, для запроса "запись" в TLP пакете будет заголовок 16 байт и 4 байта данных. Если заюзать функцию типа такой _mm256_storeu_si256, то в TLP пакете будет заголовок 16 байт и 32 байта данных. PCIE пакеты.pdf Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dvladim 0 9 июня, 2021 Опубликовано 9 июня, 2021 · Жалоба TLP минимального размера состоит из 3-х слов. (разумеется не содержит данных). Пакеты для работы с 32-х разрядным пространством адресов имеют заголовок в 3 слова, с 64-х разрядным - 4 слова. Данные в зависимости от типа пакета. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
1891ВМ12Я 0 9 июня, 2021 Опубликовано 9 июня, 2021 · Жалоба 14 hours ago, new123 said: спасибо, для меня нкжная инфа. А не подскажите, TLP всегда 4 байта? 12 байт минимум для 32 битных и 16 байт минимум для 64 битных. Мне непонятно почему на уровне архитектуры процессоров не сделали возможность send_tlp(type, data, size)... Не вижу схемотехнических проблем такового. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dxp 34 10 июня, 2021 Опубликовано 10 июня, 2021 · Жалоба 7 часов назад, AVR сказал: Мне непонятно почему на уровне архитектуры процессоров не сделали возможность send_tlp(type, data, size)... Не вижу схемотехнических проблем такового. Проблемы на уровне ISA. Как вы себе представляете инструкцию CPU, которая умеет метать массивы? Для этого и придумали DMA, а CPU управляет им путём записи в его регистры. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
alexadmin 0 10 июня, 2021 Опубликовано 10 июня, 2021 · Жалоба 4 hours ago, dxp said: Проблемы на уровне ISA. Как вы себе представляете инструкцию CPU, которая умеет метать массивы? Ну например как инструкцию REP (x86) ;) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dxp 34 11 июня, 2021 Опубликовано 11 июня, 2021 · Жалоба Эта инструкция может сама метнуть массив? Или таки скомандовать повтор другой инструкции? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
des00 25 11 июня, 2021 Опубликовано 11 июня, 2021 · Жалоба On 6/10/2021 at 3:16 AM, AVR said: 12 байт минимум для 32 битных и 16 байт минимум для 64 битных. Мне непонятно почему на уровне архитектуры процессоров не сделали возможность send_tlp(type, data, size)... Не вижу схемотехнических проблем такового. странно, ковырял корку XDMA от хилых, как я понял TLP транзакция там может быть переменного размера, от 4-х до 512 байт. Правда это внутри самой корки. Как это реализовано со стороны CPU я не изучал Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться