avatar_Kudo^

BoR MU CheckSum Generator: Утилита для быстрой работы

Автор Kudo^, 2011 Янв. 02, 05:58

« назад - далее »

0 Пользователи и 1 гость просматривают эту тему.

MuForum

Цитата: user_MU от 2011 Янв. 03, 21:30  Rany
"Удобство и скорость разработки приложения ...." - это верно. Но тут речь о скорости работы приложения идет. А если о скорости то это чистый асм+последние инструкции. То что вы осваиваете именно эту среду разработки как я уже говорил мне парралельно - юзать я буду то что работает со 100%-й гарантией результата и среда мне не важна.
Проблема в том, что на "чистом асм+последние инструкции" сложные программы вы будете писать месяца или года...
А вот на C++/C# у вас это займёт дни/недели!!!

А вот на счёт производительность спорно!
- Тут главное алгоритмы!
- И если произвести черту: Время/Производительность/Удобство - То тут явно будет огромный перевес в язык высшего уровня + asm вставки...
- Так что я с вами не соглашусь!

user_MU

Да собственно от генератора нужно одно - верно сгенеренный файл
Так что юзать его можно и в командной строке  Но это дело опять же пользователя.
За сим извольте откланяться, ибо вопросы языков\сред\алгоритмов\инструкций и т.д. это как ни крути вызывает небольшой холиварчик среди программистов. И прийти к единому мнению в этих вопросах не суждено никогда.

LeGrand

На .NET тяжелее допустить ошибку, проще отлаживать, тестировать, а главное в разы быстрее писать!


POCOMAXA

user_MU по вопросу
Спойлер
Кстати подскажите откуда инфа о заточенности компелей под процессорную архитектуру?
[свернуть]
, отвечу я, так как это по моей специфике, на сегодняшний день существуют компиляторы которые оптимизируют под архитектонику AMD, но они присутствуют только в открытом коде на системе *nix. Инфу где то и читал не 1 раз, но больше шишки сам себе набивал. Если интересно, то напиши в личку, я по истории гляну.

Спойлер
Саша, ты не прав
Спойлер
Проблема в том, что на "чистом асм+последние инструкции" сложные программы вы будете писать месяца или года...
[свернуть]
[свернуть]

Killbrum

#44
Цитата: MuForum от 2011 Янв. 03, 18:35  Во-первых: Прошу версию v0.3 в паблик =)
Во-вторых: Надо было закрыть программу, и заново запустить, а не повторно запустить.
- Это уже особенности DOT.NET
- ну как говорил - чуток пожже.
- так и было, разницы нету. Снизу прикреплю видео =)

Цитата: user_MU от 2011 Янв. 03, 19:14  Но я считаю .NET дерьмовым языком.
Согласен.

Цитата: user_MU от 2011 Янв. 03, 19:14  Кстати подскажите откуда инфа о заточенности компелей под процессорную архитектуру?
Наверно из того что это интерпретируемый код :)

Цитата: Rany от 2011 Янв. 03, 19:20  Удобство и скорость разработки приложения и количество возможных путей решения + сотни компонентов и новинки, ну и безусловно - удобно настраиваемый хостинг для проектов сделали выбор окончательным. (не без сертефикации MS, тут без вопросов)
о_О дык... смотря в чем сравнивать. Конечно после обычной студии и вин апи это кажется попроще...

Цитата: user_MU от 2011 Янв. 03, 19:30  Rany
"Удобство и скорость разработки приложения ...." - это верно. Но тут речь о скорости работы приложения идет. А если о скорости то это чистый асм+последние инструкции.
Выбирать надо под конкретные цели. Никто не будет писать дрова на шарпе, так же никто не будет делать калькулятор на АСМе =) . Конечно это всё в общих чертах , но примерную суть изложил. Темболее Шарп == RAD - среда быстрой разработки.



Цитата: LeGrand от 2011 Янв. 03, 20:23  На .NET тяжелее допустить ошибку, проще отлаживать, тестировать, а главное в разы быстрее писать!
Это всё можно сказать по другому. В .НЕТ встроенный крутой сборщик мусора который заставит пработать програму дольше, и с юзанием .НЕТ намного сложнее получить БСОД. Т.к. аля по дефолту там включен safe-code. Но как сказал один парень "как это не доверять своему коду?" . =)


Цитата: Rany от 2011 Янв. 03, 19:41  Assembler хорош для банковских транзакций для выхода на магистраль, а .Net - это именно стиль жизни, возможность выстраивать пазл из довольно сложных концепций и внутренней души технологии (её философии, духовности, как хотите).
о_О а причем тут банковская транзакция? о_О если я не ошибаюсь речь идет именно о передачи данных. Вспоминая структуру сетей и всё такое закрадывается мысля. Неужели пакеты начнут по другому формироваться?  (chuckle)  или ОС пустит на самый низкий уровень OSI?  :rolleyes: всё это уже давно автоматизировано и никто в этом не будет ковыряться.

Примером "юзания" АСМ могу привести банальную оптимизацию игрового движка. Плохой движок думаю все видели. Изучая тот же Опен Гл я понял что там как раз оптимизация и важнее всего.

Ну а про стиль жизни и такое... =) улыбнуло. Это обычный язык который имеет 5-7% рынка не более. Причем тот же Objective-C догоняет его семимильными шагами.




Собственно как и обещал - видео =). Програмку пока не дам  :D
https://www.youtube.com/watch?v=wX5r1QAjZTs

П.С. причем моя еще генерит на 1с быстрее если отключен захват видео. Пруф -
https://i019.radikal.ru/1101/19/8be909c20d6c.bmp

Rany

Killbrum
не понимаю, для чего вам было столько трудиться.
Некоторые вопросы вообще остаются риторическими, чтобы не подписываться "согласен" - "не согласен" - у вас же есть возможность поблагодарить автора (на крайний случай).

Вы можете себе представить более быстрый код, чем assembler, который мог бы идеально подойти для вывода миллионов транзакций банковских операций за максимально короткий промежуток времени? Имеете представление о каких скоростях идёт речь, когда звучит выражение "магистраль"?

В отношении будущих разработок для новых ОС - уверен, что они вас ещё удивят.
По поводу не столь высокой доли на рынке .Net в немалом проигрывает из-за того, что за машину (хостинг) дерут непомерно большие деньги (за обслуживание), поэтому немало людей и остаются на java или php

POCOMAXA

Rany
Спойлер
Вы можете себе представить более быстрый код, чем assembler, который мог бы идеально подойти для вывода миллионов транзакций банковских операций за максимально короткий промежуток времени? Имеете представление о каких скоростях идёт речь, когда звучит выражение "магистраль"?
[свернуть]
, если ты имеешь ввиду MASM или ему подобные, я тебе спокойно назову более быстрый код

Killbrum

Rany

- ну если всё это о том что я понял то просто процитирую =)
Цитата: MuForum от 2011 Янв. 02, 04:58  P.S. -> Жду сравнений с другими аналогами, особенно интересуют сравнения по времени.
Если я угадал то думаю комментарии излишни.

- встречный и так же риторический вопрос. Какая платформа? =) . Думаю итак ясно что в зависимости от платформы тут многое меняется...

Спойлер
- .НЕТ это платформа. Никто не заставляет писать веб - приложения. Вообще веб-приложения это бонус к прикладным, и наоборот. То есть никто не заставляет переходить с веба на .НЕТ и с прикладного на .НЕТ. Но вся проблема в том что те же Си  - 16% С+  = 9% пхп 7.5% а Шарп 6.5% . Думаю не сложно понять что шарп это некий предложенный аналог, но какой далеко не лучший. (так говорит статистика). https://www.tiobe.com/index.php/content/pap...tpci/index.html
Да и смотря на тенденцию развития того же шарпа (по 0.5 в год) и Обжектива для айфонов (по 2% в год). Думаю глупо споритьразмышлять. Конечно разные языки для разных платформ.

У меня своя религия:
Хочешь скорости - пиши на чистом WinApi
Хочешь простоты разработки - пиши на Builder
Хочешь кроссплатформенности - MSVC + Qt

все они делают чистый натив. Глупо о чем то спорить когда Тот же Шарп по скорости даже до Билдера не дотягивает. А разница Билдера и Студии колосальная. Так же как и со студией и gcc. Никогда не любил всякие интерпретаторские штучки. И ИМХО считаю что они делают человека тупее. Особенно Шарп , где 90% всего автоматизировано. Кстати напоминает билдер :). Ну и вспоминаю как говорили мелкософтеры о билдерщиках "формошлепы" =)).
[свернуть]

MuForum

#48
Цитата: Killbrum от 2011 Янв. 04, 00:27  
Цитата: MuForumP.S. -> Жду сравнений с другими аналогами, особенно интересуют сравнения по времени.
Если я угадал то думаю комментарии излишни.
Опубликуешь программу, тогда и комментарии будут излишни, а пока всё под большим вопросом...


# MU CheckSum Generator v0.3 P4F: Скачать;


P.S. -> Действительно, 0.3 версия работает шустрее, что на Intel, что на AMD.
- Мои поздравления.

Rany

Цитата: POCOMAXA от 2011 Янв. 03, 22:08  если ты имеешь ввиду MASM или ему подобные, я тебе спокойно назову более быстрый код
Охотно послушаю (хотя дальше оптимизировать разве что до непосредственных инструкций процессора).
Давно мне никто из со-BoR-цев не давал уроков.

Fiesta

Не знаю если мой пост нужен,но я сдержатся не мог

В первый раз вижу что на стольк хотят оптимизировать свое творение,УРа парни,Ура!

POCOMAXA

#51
Спойлер
Rany
Спойлер
Охотно послушаю (хотя дальше оптимизировать разве что до непосредственных инструкций процессора).
Давно мне никто из со-BoR-цев не давал уроков
[свернуть]
, ты забыл про самое главное в ассемблере, это язык программирования низшего уровня, и быстрее него прямое обращение к железу, то бишь бинарный код, соответственно прога написанная на прямой команде и даст наиболее быстрый результат. Я уроков не даю, захочешь спросить, в скайпе спросишь, просто вношу уточнение
[свернуть]

Rany

Цитата: Fiesta от 2011 Янв. 03, 23:19  оптимизировать
Не стоит упоминать слово "оптимизация" в отношении продуктов MuForum, иначе это может вызвать у него StackOverflow и подвисание на 2-3 месяца ещё минимум )


POCOMAXA
всё понятно, мы просто называли разные вещи одним именем. Для меня между assembler и машинный код - нет разницы.

POCOMAXA

Спойлер
ДЛя меня тоже, просто, не поняли друг друга  (think)
[свернуть]

Imp0ssible

ЦитироватьТы конечно извини меня, но что-то ты приврал...
Ни капельки. Результат ты лично видел через тим вив.

Mr.Kernighan

Ребят, я тут вообще не в тему, сразу извиняюсь, я сегодня праздновал еще раз Новый Год, но просто хочется написать, что c/c++ это всем и вся пездес... Я как отдавал предпочтение c/c++ так до конца и буду вместе с ним, ну а про assembler я конечно вообще молчу  :D :D :D
Уважаю хардкорных программистов :)
Читаю это сообщение и понимаю что это бред конечно, но я сегодня делюсь своими мыслями со всеми!
Саня, программа отличная, что у одного что у другого, честно скажу что я ее даже не смотрел, но я уважаю ваши продукты какими они нибыли, потому что я знаю с какой любовью и душой они были сделаны, хы :)
Всех ребят с Новым Годом, большого счастья и всего самого наилучшего.

MuForum

#56
Хорошо, первый раз публикую свои исходники.
byte[] lpFileBuffer = null;
// ----
using (FileStream fs = new FileStream(FilePath, FileMode.Open))
{
lpFileBuffer = new byte[fs.Length];
// ----
fs.Read(lpFileBuffer, 0, lpFileBuffer.Length);
}
// ----
int iCoresCount = Environment.ProcessorCount;
// ----
uint uSize  = (uint)lpFileBuffer.Length;
// ----
uint dwMaskLength = (uint)(uSize / 4);
int iMaskLength = (int)(uSize / 4);
// ----
g_Config.Mask = new uint[dwMaskLength];
// ----
Stopwatch sw = new Stopwatch();
sw.Start();
// ----
ParallelOptions po = new ParallelOptions();
// ----
po.MaxDegreeOfParallelism   = Environment.ProcessorCount;
// ----
Parallel.For(0, iMaskLength, po, i =>
{
g_Config.Mask[i] = BitConverter.ToUInt32(lpFileBuffer, i * 4);
});
// ----
Parallel.For(0, 1024, po, (i, loopState) =>
{
if (g_Config.bShouldStop == false)
{
g_Config.csf.Checksums[i] = GetChecksum(lpFileBuffer, g_Config.Mask, dwMaskLength, (ushort)i);
}
else
{
loopState.Stop();
}
});
// ----
sw.Stop();
// ----


public uint GetChecksum(byte[] lpFileBuffer, uint[] Mask, uint dwMaskLength, ushort wChecksumKey)
{
uint dwResult   = (uint)(wChecksumKey << 9);
// ----
uint dwKey  = 0;
// ----
for (uint i = 0, j = 0; i < dwMaskLength; i++, j += 4)
{
dwKey   = Mask[i];
// ----
switch (((j >> 2) + wChecksumKey) % 3)
{
case 0:
{
dwResult ^= dwKey;
}
break;
case 1:
{
dwResult += dwKey;
}
break;
case 2:
{
dwResult = (dwResult << (int)(dwKey % 11)) ^ dwKey;
}
break;
default: break;
}
// ----
dwResult ^= ((wChecksumKey + dwResult) >> (int)(((j >> 2) % 16) + 3));
}
// ----
return dwResult;
}

napuk228

Серьезный шаг...                          

7mm

#58
Как и ожидалось, *******. Ничего интересного.

MuForum

#59
Цитата: 7mm от 2011 Янв. 04, 13:10  Как и ожидалось, быдло-код. Ничего интересного.
Быдло - Это ты сам!
А если ты такой умный, напиши лучше!
- Трепать языком все умеют, смотрю ты в том же числе...


Очень хочется сравнить код с этим:
using System;
using System.Text;
using System.Runtime.InteropServices;
using System.IO;
using System.Threading.Tasks;

namespace MainChecksumGen
{
class Program
{
static void Main(string[] args)
{
CheckSumFile csf = new CheckSumFile();
csf.Checksums = new uint[1024];
byte[] lpFileBuffer;
int ms = 0;
try
{
using (FileStream fs = new FileStream("main.exe", FileMode.Open))
{
lpFileBuffer = new byte[fs.Length];
fs.Read(lpFileBuffer, 0, lpFileBuffer.Length);
}
int start = Environment.TickCount;
Parallel.For(0, 1024, i =>
{
csf.Checksums[i] = GetChecksum(lpFileBuffer, (uint)lpFileBuffer.Length, (ushort)i);
});

ms = Environment.TickCount - start;
using (FileStream ss = File.Create("CheckSum.dat"))
{
ss.Write(Serialize(csf), 0, 4096);
}
}
catch (FileNotFoundException e)
{
Console.WriteLine("Couldn't find main.exe. Make sure its in the same directory as the Program");
}
catch (Exception e)
{
Console.WriteLine(e.Message);
}

Console.WriteLine("Completed in {0} ms. Saved to CheckSum.dat.nPress Any Key to continue...", ms);
Console.ReadKey();
}

static uint GetChecksum(byte[] lpFileBuffer, uint dwFileSize, ushort wChecksumKey)
{
uint dwResult, dwAcc;

dwAcc = wChecksumKey;
dwResult = dwAcc << 9;

for (uint I = 0; I <= (dwFileSize - 4); I += 4)
{
uint dwKey;
//byte[] dwkey = new byte[4];
dwKey = MakeDword(lpFileBuffer[I + 3], lpFileBuffer[I + 2], lpFileBuffer[I + 1], lpFileBuffer[I]);
switch (((I >> 2) + wChecksumKey) % 3)
{
case 0:
dwResult = (uint)(dwResult ^ (int)dwKey);
break;
case 1:
dwResult += dwKey;
break;
case 2:
dwResult = dwResult << (int)(dwKey % 11);
dwResult ^= dwKey;
break;
}

if ((I % 4) == 0)
{
dwResult ^= (dwAcc + dwResult) >> (int)((I >> 2) % 16 + 3);
}
}
Console.WriteLine(wChecksumKey);
return dwResult;
}

public static byte[] Serialize(object Obj)
{
int rawsize = Marshal.SizeOf(Obj);
byte[] rawdata = new byte[rawsize];
GCHandle handle = GCHandle.Alloc(rawdata, GCHandleType.Pinned);
Marshal.StructureToPtr(Obj, handle.AddrOfPinnedObject(), false);
handle.Free();
return rawdata;
}

public static UInt32 MakeDword(byte byte1, byte byte2, byte byte3, byte byte4)
{
return (UInt32)((byte1 << 24) + (byte2 << 16) + (byte3 << 8) + byte4);
}
}

[StructLayout(LayoutKind.Sequential, Pack = 1, Size = 4096)]
struct CheckSumFile
{
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 1024)]
internal uint[] Checksums;
}
}

Похожие темы (4)

Сообщений: 23
Просмотров: 18708

Сообщений: 5
Просмотров: 2357

Сообщений: 9
Просмотров: 4040