Страниц: [1] 2
  Печать  
Автор Тема: Битовый поток: неужели всё так плохо?  (Прочитано 11225 раз)
ZZZ
Участник
*
Offline Offline

Сообщений: 12


Просмотр профиля
« : Января 13, 2005, 08:27:51 am »

Имеется карта, принимающая сырой битовый поток, драйвер, этот поток записывающий на диск.
Программно необходимо отыскать маркерные байты в этом файле и переписать файл нормализованным, то бишь сдвинутым на необходимое число бит. Размер файла, между прочим, измеряется гигабайтами. Пусть маркеры мы отыскали, фрагменты, имеющие маркеры, выделили. Теперь надо самое простое: записать файл. Неужель нет ничего более эффективного, чем ужасное:

uchar ResultBuffer[MAX], SourceBuffer[MAX];
...
ResultBuffer = (SourceBuffer<<ShiftNBit) + (SourceBuffer[i+1]>>8-ShiftNBit);
...

с последующей записью ResultBuffer'а на диск???
Ну хорошо, с помощью ассемблерной вставки можно работать сразу с двумя байтами. И только?

Меня терзают смутные сомнения, что я не знаю чего-то достаточно элементарного.

С уважением, ZZZ.
Записан

С уважением, ZZZ
lestat
QOR.Moderator
*****
Offline Offline

Сообщений: 985


I don't trust anything


Просмотр профиля WWW
« Ответ #1 : Января 13, 2005, 08:52:01 am »

ZZZ
Меня терзают смутные сомнения, что я не знаю чего-то достаточно элементарного

Значит я тоже не знаю так и надо.

P.S. Только я бы вместо + поставил бы |
Записан

AG
QOR.Moderator
*****
Offline Offline

Сообщений: 872



Просмотр профиля WWW
« Ответ #2 : Января 13, 2005, 10:22:16 am »

Есть еще MMX.. см. psllq и psrlq - по 64 бит...
У P4 есть еще pslldq и psrldq - по 128 бит...
Однако, все это IMHO не то, что Вы ищите. Я в свое время писал подобрую библиотечку сам...
Записан

Max_Fly
Участник
*
Offline Offline

Сообщений: 0


Просмотр профиля
« Ответ #3 : Января 13, 2005, 02:00:29 pm »

если не интересует выравнивание по границе байта - можно просто выкосить всё лишнее. . если необходимо выравнивание по границе байта - то только сдвиг и сложение. да собственно  от DES народ отошёл из-за его ориентирования на биты - там аналогичная проблема была - шарманка с несколькими дисками -  шифрует намного эффективнее компьютера. Если надо именно выравнивать по границе байта (и быстро) - лично я бы делал это схемотехнически. в конце концов не так сложно сделать схему которая отлавливает маркер - и от маркера до маркера - сливает битовый поток байтами. вон любой телевизор - ловит строчный синхроимпульс - и вырисовывает строку изображения. ваше устройство - формально - мааальсенький кусочек от субмодуля синхронизации.
Записан
MikeP
Участник
*
Offline Offline

Сообщений: 6


Просмотр профиля WWW
« Ответ #4 : Января 13, 2005, 04:35:28 pm »

а еще советую - гляньте внутрь <gulliver.h>
или в хелпе посмотрите ENDIAN_SWAP и иже с ними макросы...
Записан
ZZZ
Участник
*
Offline Offline

Сообщений: 12


Просмотр профиля
« Ответ #5 : Января 13, 2005, 05:21:01 pm »

Max_Fly
Если надо именно выравнивать по границе байта (и быстро) - лично я бы делал это схемотехнически.]

Не сыпьте соль на рану. А то я сам не понимаю. Да вот аппаратчики наши... Эх...
Впрочем, я ведь упростил проблему, дабы не загромождать существо вопроса. Там не маркер, а кодовая группа сигналов, образующих вместе транспортный кадр. Плюс ещё несколько примочек, приятно разнообразящих процесс программирования. В общем, приходится мне самому... это... ну в общем... мучаться. Ладно, всё ясно - царского пути нет.

С уважением, ZZZ
Записан

С уважением, ZZZ
AG
QOR.Moderator
*****
Offline Offline

Сообщений: 872



Просмотр профиля WWW
« Ответ #6 : Января 13, 2005, 06:05:47 pm »

А я все читаю и не могу понять где собака зарыта...

ZZZ
Имеется карта, принимающая сырой битовый поток, драйвер, этот поток записывающий на диск.

а может вот тут анализировать маркер и делать сдвиги по границе байта... имеется в виду в драйвере...
Записан

ed1k
QOR.Moderator
*****
Offline Offline

Сообщений: 739


Просмотр профиля WWW
« Ответ #7 : Января 14, 2005, 07:48:56 am »

AG
а может вот тут анализировать маркер и делать сдвиги по границе байта... имеется в виду в драйвере...

Ну это дело не меняет. Скорее всего поток идет настолько быстро, что времени на битовые сдвиги при регистрации уже нет.
Когда-то много лет назад, в том же смешном заведении, где и автор вопроса работает, я работал и занимался аналогичной задачей. Поток был HRPT со спутников NOAA. Мое решение с аппаратным компаратором руководство отвергло напрочь, и решено было делать "как в Москве, там уже добились определенного прогресса" (PC большой, он все сдвинет). Сдвигал и логически ORил как и описано выше - вроде нету ничего более эффективного на х86. Для слюноотделения только могу сказать, что некоторые архитектуры, свойственные для сигнальных процессоров, имеют аппаратный регистр сдвига. Т.е. загружая/добавляя число из памяти в аккамулятор его можно заодно одновременно и сдвинуть на нужное колличесто разрядов. Сегодня (и в другом месте - там это было и, как вижу, есть "невозможным", я бы почти всю аппаратную часть моего старого варианта решил таким недорогим DSP, разместив его на плате расширения - оставив PC делать ему свойственную работу (молоть байты и слова, а не биты).
Записан
ZZZ
Участник
*
Offline Offline

Сообщений: 12


Просмотр профиля
« Ответ #8 : Января 14, 2005, 09:20:41 am »

ed1k
Мое решение с аппаратным компаратором руководство отвергло напрочь, и решено было делать "как в Москве, там уже добились определенного прогресса"

Как приятно, что в этом изменяющемся мире есть что-то незыблемое и постоянное. Я имею в виду отношение к делу в нашем смешном заведении.
И совершенно верно, при скорости регистрации 8Мб/сек с требованием в перспективе поднять до 32Мб/с (Мб - это именно то, что я сказал: мегабайты) требовать от драйвера еще и это делать... (Offtopic: Хотя не поверите - приходится на полном серьезе убеждать в невозможности на обычном десктопе, пусть даже Адватнеховском, это реализовать. А "в Москве уже добились определенного прогресса!" ).

Еще раз спасибо всем за обсуждение.

С уважением, ZZZ

P.S. 2edlk: слюна отделилась.
Записан

С уважением, ZZZ
lestat
QOR.Moderator
*****
Offline Offline

Сообщений: 985


I don't trust anything


Просмотр профиля WWW
« Ответ #9 : Января 14, 2005, 09:44:55 am »

ZZZ
А "в Москве уже добились определенного прогресса!"

Читаю и плачу Как все до боли знакомо ... и решение программно всех аппаратных проблем и соревнование с "Москвой" абстрактной

P.S. тьфу-тьфу-тьфу, в последнее время стало немного отпускать
Записан

Max_Fly
Участник
*
Offline Offline

Сообщений: 0


Просмотр профиля
« Ответ #10 : Января 14, 2005, 11:07:00 am »

ed1k
недорогим DSP, разместив его на плате расширения - оставив PC делать ему свойственную работу
IMHO очень правильное решение. Могу только посоветовать автору оригинального топика постараться отстоять такую идею перед руководством...
Записан
Evgeniy
Jr. Member
**
Offline Offline

Сообщений: 73


Просмотр профиля
« Ответ #11 : Января 14, 2005, 05:21:26 pm »

Уважаемые Сэры! Тут проскочила одна "ассиметричная" мысль: неужели этот жуткий сдвиг медленнее чтения/записи файла? Что-то мне подсказывает, что сдвиг вполне можно делать на фоне опережающего чтения-запаздывающей записи. Посмотрите, может это поможет "догнать Москву"...
Записан
AG
QOR.Moderator
*****
Offline Offline

Сообщений: 872



Просмотр профиля WWW
« Ответ #12 : Января 14, 2005, 05:38:08 pm »

Угу... Уважаемые Сэры просто говорят о своем...
Взять принять 8 байт, а потом сделать один сдриг регистра mmx и один or с остатко предыдущих данных...  и все в цикле...
Я просто понял что этот топик не о том... он о наболевшем... Они не ищут простых ответов (С) ;-)
Записан

bessonov
Участник
*
Offline Offline

Сообщений: 0


Просмотр профиля
« Ответ #13 : Января 14, 2005, 05:48:07 pm »

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

И ни кого догонять не надо, надо делать всё по нормальному.


P.S. Бывают случаи хуже.
Записан
AG
QOR.Moderator
*****
Offline Offline

Сообщений: 872



Просмотр профиля WWW
« Ответ #14 : Января 14, 2005, 06:20:20 pm »

bessonov
Ответ прост - возложить некоторые задачи на коллегу системотехника, которые он должен был решить (если грамотно составлено ТЗ для него). Что бы его дивайс давал удобоваримые байты.

Верно подмечено!
Суть в том, что это условие очень редко соблюдается... Об этом и топик только начался он почему-то с выравнивания файла сдвигами... Я уж думал приложить кусок оптимизированного кода, а потом понял в чем суть...
Записан

Страниц: [1] 2
  Печать  
 
Перейти в: