Вверх ↑
Этот топик читают: Гость
Ответов: 1343
Рейтинг: 31
#1: 2015-01-07 18:11:32 ЛС | профиль | цитата
как сделать схемку получения, без разницы какого хеша, но что бы он был без возможности дешифровки
хэшить надо строку ввиде 8 байт, FF00FF00FF00FF00, она постоянно меняется. Чем меньше хэш по количеству символов тем лучше
нужно получить как можно большую скорость. Мне пока удалось вот таким путём сделать 6-7 мкс:

code_34857.txt
карма: 2

0
файлы: 1code_34857.txt [987B] [189]
Ответов: 2059
Рейтинг: 132
#2: 2015-01-07 19:13:21 ЛС | профиль | цитата
но что бы он был без возможности дешифровки

Как это надо понимать?
Все хеш функции являются такими по определению.
Чем меньше хэш по количеству символов тем лучше

Тем больше повторений.

Простейшая хеш-функция для строк. Не бог весть что, зато быстрая.
Это для текста, переделай для диапазона FF - 00
function Hash(const aKey: string; aTableSize: integer): integer;
const M=31;
var i: integer;
begin
Result:=0;
for i:=1 to length(aKey) do
Result := (M*Result+ord(aKey[i])) mod aTableSize;
end;

Легко перевести в asm, но выигрыша большого не будет.
карма: 6

0
Ответов: 1343
Рейтинг: 31
#3: 2015-01-07 19:42:14 ЛС | профиль | цитата
flint2 писал(а):
Тем больше повторений.


это верно, но и вариаций строки в пределах 1000 я так думаю
карма: 2

0
Ответов: 4630
Рейтинг: 749
#4: 2015-01-08 13:42:05 ЛС | профиль | цитата
А что, компонента CRC16_32 недостаточно? CRC16 даёт сумму длиной 2 байта
Rysik писал(а):
вариаций строки в пределах 1000 я так думаю
Вариаций строки:
- длиной 16 символов (HEX-значения) - 16^16
- длиной 8 ASCII символов - 256^8
[offtop]в этих двух случаях количество комбинаций одинаково[/offtop]
карма: 26

0
Ответов: 1343
Рейтинг: 31
#5: 2015-01-08 17:46:01 ЛС | профиль | цитата
Netspirit писал(а):
А что, компонента CRC16_32 недостаточно?


ммм, ТОПИК НАДО ЧИТАТЬ ВНИМАТЕЛЬНЕЙ!

Rysik писал(а):
нужно получить как можно большую скорость


разве эта фраза ни на что не насторожила ?
карма: 2

0
Ответов: 4630
Рейтинг: 749
#6: 2015-01-08 18:59:23 ЛС | профиль | цитата
code_34863.txt
Компонент CRC16_32 можно ускорить, если не вычислять таблицу при каждом вызове методов, а только при изменении Polynom/Init.
карма: 26

1
файлы: 1code_34863.txt [4.2KB] [237]
Голосовали:Rysik
Ответов: 1343
Рейтинг: 31
#7: 2015-01-09 11:54:25 ЛС | профиль | цитата
Netspirit писал(а):
Компонент CRC16_32 можно ускорить, если не вычислять таблицу при каждом вызове методов, а только при изменении Polynom/Init.


хм действительно получше, но я уже реализовал по методу из шапки, ну придётся переделывать
------------ Дoбавленo в 11.54:
ну пи... какой то, всю активную часть схемы убивает и останавливает, этот Inline, требуется читать данные каждые 0 мс, схема из шапки нормально работает в данном темпе, а вот этот IC ну ни в какую...
карма: 2

0
Ответов: 2059
Рейтинг: 132
#8: 2015-01-09 15:54:58 ЛС | профиль | цитата
aKey - твоя строка.
length - длина строки
aTableSize - константа - величина твоей таблицы (если умножить на три, то повторов практически не будет), т.е. если нужна разрядность байт, то 255, если dword, то FFFFFFFF.
M - константа. Надо подобрать число. В твоём случае наверное 000F00.
Всю малину портит 00. По этому может такой алгоритм и не подойдёт.

Вот алгоритм которым я пользуюсь для хеш таблиц. Нулевые значения тут тоже пройдут.
Выдрал из компонента.
code_34876.txt

Два компонента: http://forum.hiasm.com/forum_serv.php?q=56&id=3855
Обеспечивают доступ к значениям таблицы по левой части ключа.
Типа: бла бла бла=тра та та селёдка.
Работает очень шустро. Таблицу из 800 000 правил строит за миллисекунды.
Доступ по ключю - единицы микросекунд.
Второй компонент применяет к ключу маску и восстанавливает в правой части значения под звёздочками.
Типа - все *но *ют=всё *но *ют. Ключ "все вино выпьют" значение по ключу "всё вино выпьют".
карма: 6

0
файлы: 1code_34876.txt [1.8KB] [298]
Ответов: 4630
Рейтинг: 749
#9: 2015-01-09 16:02:29 ЛС | профиль | цитата
Rysik писал(а):
но я уже реализовал по методу из шапки
Ну, раз реализовал, так чё паришься.
Rysik писал(а):
требуется читать данные каждые 0 мс
Интересно, откуда ж у тебя эти данные поступают...
0 мс - любые операции требуют времени для своего выполнения. Пиши всю программу на ассемблере.
карма: 26

0
Ответов: 2059
Рейтинг: 132
#10: 2015-01-09 16:40:31 ЛС | профиль | цитата
Забыл написать:
code_34877.txt
карма: 6

0
файлы: 1code_34877.txt [524B] [295]
Ответов: 1841
Рейтинг: 369
#11: 2015-01-09 18:24:36 ЛС | профиль | цитата
Сложно однако пытаться выжать из идеи максимум скорости, когда тебе даже архитектура пакета, палки в колёса кидает
Обычный цикл с передачей данных (без обработки), уже отъедает львиную долю тактов ядра:
Пример

Add(Label,3644099,511,336)
{
Left=155
Top=80
}
Add(Button,15419145,385,329)
{
Left=45
Top=75
link(onClick,3908044:doStart,[])
}
Add(TimeCounter,3908044,462,329)
{
Precision=1
link(onStart,1068383:doFor,[])
link(onStop,3644099:doText,[])
}
Add(DoData,10152592,644,329)
{
Data=String(FF00FF00FF00FF00)
}
Add(For,1068383,574,329)
{
End=50000
link(onEvent,10152592:doData,[])
link(onStop,3908044:doStop,[(619,342)(619,381)(450,381)(450,342)])
}


[offtop]Я тут "пошаманил" у себя, ради интереса :
#cpp
QTime timer;
const char* data = "FF00FF00FF00FF00";
uint len = qstrlen(data);
uint MAX = 2000000000; //2 миллиарда
QVector<quint16> vec(MAX); //~3.7 гб ОЗУ (x64)
timer.start();
auto check = [&](quint16& i) {
i = qChecksum(data, len); //CRC-16
};
QtConcurrent::blockingMap(vec, check); // 4 ядра = 4 потока
qDebug() << timer.elapsed();
//результат 41510 ms или 41.51 сек
Хотя тут я смухлевал и параллельку встроил...
Ускорить можно, только подключив к процессу - GPU.
[/offtop]
карма: 1
0
Ответов: 1343
Рейтинг: 31
#12: 2015-01-09 19:32:47 ЛС | профиль | цитата
Netspirit писал(а):
Интересно, откуда ж у тебя эти данные поступают...


ну с какой скоростью они вылетают я не замерял но скорость чтения составляет 0 мс от простого таймера, читает данные простой ReadProcessMemory, по 8 байт
------------ Дoбавленo в 19.32:
да и вообще уже по сути и не надо, ускорил с 17 мкс до 7 мкс, так клиенты говорят мол давай старую версию...

не знаю конечно почему, но вероятно при большом количестве интерраций схема из шапки медленно работает и подвисает
карма: 2

0
Ответов: 4630
Рейтинг: 749
#13: 2015-01-09 19:34:27 ЛС | профиль | цитата
А зачем контрольная сумма? Проверять не изменились ли данные? Если да, то их и так можно сравнивать с предыдущим значением.
карма: 26

0
Ответов: 1343
Рейтинг: 31
#14: 2015-01-09 19:37:58 ЛС | профиль | цитата
Netspirit писал(а):
А зачем контрольная сумма?


тупо прикрыть эти самые данные, они просто потом сравниваются через Position, и вот можно выловить легко данные, при включении и выключении тех или иных данных они заносятся в форматирование, и становятся целой строчкой разделённой, а Position ловит из потока и сравнивает со строчкой, если нашёл там такие то данные или такие то то идёт дальше схема

по сути надо то записывать данные в массив и удалять их по мере включения, и этот массив сканить чем то очень быстро, и вот оптимальный вариант нашёл через компонент Position
карма: 2

0
Ответов: 2059
Рейтинг: 132
#15: 2015-01-09 19:47:46 ЛС | профиль | цитата
Вообще толком не понятна задача.
Если хеш является индексом для идентификации данных, - это одно, если отслеживать изменения - это другое, то в данном случае и хеш не требуется, если из 8 байт получить 2, а по ним идентифицировать - смотри первое только бестолково.
И что это такое FF00FF00FF00FF00 - маска?, частный случай, как пример? Если пример, то не удачный, который вводит в заблуждение.
Тогда так FA0712DBCC54E809.
P.S.
Понятно.
карма: 6

0
Сообщение
...
Прикрепленные файлы
(файлы не залиты)