Перейти к содержимому
OpenReactor

Майнинг OpenComputer

Рекомендуемые сообщения

Короче решил написать майнер для OC.
За основу взял Duino-Coin : https://github.com/revoxhere/duino-coin
Вот сам майнер: https://github.com/ReactorNefg/OpenComputer-Miner-Duino

Програма полу рабочая (в любой момент может крашнуть)

Писал в рофл. Готов выслушать критику по коду и тд.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
1 час назад, OpenReactor сказал:

Писал в рофл. Готов выслушать критику по коду и тд.

Критиковать буду саму идею.

 

Я могу понять попытки реализовать шифрование RSA на OpenComputers. Та задача тоже сильно нагружает вычислениями игровой сервер, но она хотя бы решает какие-то игровые задачи. Да и нагрузка на сервер не постоянная.

 

Но какие есть причины для майнинга в OpenComputers?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Только что, eu_tomat сказал:

Критиковать буду саму идею.

 

Я могу понять попытки реализовать шифрование RSA на OpenComputers. Та задача тоже сильно нагружает вычислениями игровой сервер, но она хотя бы решает какие-то игровые задачи. Да и нагрузка на сервер не постоянная.

 

Но какие есть причины для майнинга в OpenComputers?

Я писал что бы узнать можно ли вообще такое реализовать. Чистый интерес.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
10 минут назад, Wolframoviy сказал:

Опа, ща пойду убивать сервера, хех, шучу.

Не убьешь.  Тут или краш програмы или компьютер выключится.:dance3:

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
2 минуты назад, OpenReactor сказал:

Не убьешь.  Тут или краш програмы или компьютер выключится.:dance3:

10 АФСУшек со всех сторон подключённых к компу, хехе.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Только что, Wolframoviy сказал:

10 АФСУшек со всех сторон подключённых к компу, хехе.

Асуждаю

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Только что, OpenReactor сказал:

Асуждаю

асуждай дальше, а я продолжу возрождать сервер

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
30 минут назад, OpenReactor сказал:

Я писал что бы узнать можно ли вообще такое реализовать. Чистый интерес.

На практике OpenComputers способен выполнять довольно тяжёлые алгоритмы. Вылеты по причине длительной неуступки времени можно сделать очень редкими, а к самому компьютеру можно прикрутить подобие сторожевого таймера. Другое дело, что не существует универсального способа адаптировать произвольный алгоритм. Но в каждом конкретном случае можно найти хорошее решение, максимально использующее вычислительные возможности игрового сервера.

 

20 минут назад, OpenReactor сказал:

Не убьешь.  Тут или краш програмы или компьютер выключится.

Конкретно этой программой убить трудно. Но никто не мешает доработать её. Зачем ограничивать себя в майнинге?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
local function round(num)
    return num + (2 ^ 52 + 2 ^ 51) - (2 ^ 52 + 2 ^ 51)
end

Вот мне просто интересно, каждый раз при вызове функции двойка будет четыре раза возводиться в степень? Не будет ли эффективнее сделать так?

local huge = 2 ^ 52 + 2 ^ 51
local function round(num)
    return num + huge - huge
end

Да и подход к округлению странный. Чем не устраивает math.floor(num+0.5) ?

 

Зачем для получения timeDifference нужно реальное время? Измерять временнЫе интервалы в OpenOS можно не пропиливая жесткий диск.

 

И самый главный вопрос: откуда будут сыпаться биткойны и много ли уже насыпалось?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
6 часов назад, Zer0Galaxy сказал:

local function round(num)
    return num + (2 ^ 52 + 2 ^ 51) - (2 ^ 52 + 2 ^ 51)
end

Вот мне просто интересно, каждый раз при вызове функции двойка будет четыре раза возводиться в степень? Не будет ли эффективнее сделать так?


local huge = 2 ^ 52 + 2 ^ 51
local function round(num)
    return num + huge - huge
end

Да и подход к округлению странный. Чем не устраивает math.floor(num+0.5) ?

 

Зачем для получения timeDifference нужно реальное время? Измерять временнЫе интервалы в OpenOS можно не пропиливая жесткий диск.

 

И самый главный вопрос: откуда будут сыпаться биткойны и много ли уже насыпалось?

1. Исправлю

2. Исправлю

3. Мы майним Duino-Coin (0.00106335$ прайс) примерно в день будет 3 -5 шт.:beach:

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
10 минут назад, OpenReactor сказал:

Мы майним Duino-Coin (0.00106335$ прайс) примерно в день будет 3 -5 шт.:beach:

На каком сервере уже разрешили майнить?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
1 минуту назад, eu_tomat сказал:

На каком сервере уже разрешили майнить?

Локальный) И только для теста. Это просто бессмысленно)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
В 28.09.2021 в 12:54, Zer0Galaxy сказал:

Вот мне просто интересно, каждый раз при вызове функции двойка будет четыре раза возводиться в степень? Не будет ли эффективнее сделать так?

Посмотрим на байт-код:

$ echo 'local function round(nul) return nul + (2 ^ 52 + 2 ^ 51) - (2 ^ 52 + 2 ^ 51) end' | luac5.3 -l -l -

main <stdin:0,0> (2 instructions at 0x55f08348ca20)
0+ params, 2 slots, 1 upvalue, 1 local, 0 constants, 1 function
        1       [1]     CLOSURE         0 0     ; 0x55f08348cc60
        2       [1]     RETURN          0 1
constants (0) for 0x55f08348ca20:
locals (1) for 0x55f08348ca20:
        0       round   2       3
upvalues (1) for 0x55f08348ca20:
        0       _ENV    1       0

function <stdin:1,1> (4 instructions at 0x55f08348cc60)
1 param, 2 slots, 0 upvalues, 1 local, 1 constant, 0 functions
        1       [1]     ADD             1 0 -1  ; - 6.7553994410557e+15
        2       [1]     SUB             1 1 -1  ; - 6.7553994410557e+15
        3       [1]     RETURN          1 2
        4       [1]     RETURN          0 1
constants (1) for 0x55f08348cc60:
        1       6.7553994410557e+15
locals (1) for 0x55f08348cc60:
        0       nul     1       5
upvalues (0) for 0x55f08348cc60:

Видно, что ADD и SUB тут работают с константой. Обращение к константе быстрое, доступное, лёгкое, воздушное. В предложенном варианте появляется upvalue, к которым доступ будет дольше. Так что эффективнее не станет.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

@Fingercomp Опыт подтверждает твои выводы:

 

local uptime=require("computer").uptime

local function round1(num)
    return num + (2 ^ 52 + 2 ^ 51) - (2 ^ 52 + 2 ^ 51)
end

local huge = 2 ^ 52 + 2 ^ 51
local function round2(num)
    return num + huge - huge
end

n = 1000000

start=uptime()
for i=1,n do
  round1(1.234)
end
print("Constant ",uptime()-start)

start=uptime()
for i=1,n do
  round2(1.234)
end
print("Upvalue ",uptime()-start)

start=uptime()
for i=1,n do
  math.floor(1.234+0.5)
end
print("math.floor ",uptime()-start)

image.png.89b444b504a39a05ced50f1e58f5eeab.png

Предложенный топикстартером вариант эффективнее и моего и floor()

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
50 минут назад, Zer0Galaxy сказал:

Предложенный топикстартером вариант эффективнее и моего и floor()

Чуть лучше или по крайней мере не хуже должен быть вариант с использованием local floor=math.floor. Вызов же math.floor имеет двойную цену: за обращение к полю таблицы (глобальной переменной) и за, собственно, вызов функции. Что и видно по результатам теста. Локальный же вызов floor() работает шустро.

 

А учитывая, что вариант с использованием floor() выглядит наиболее очевидно, имеет смысл предпочесть именно его.

Изменено пользователем eu_tomat

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
4 часа назад, Zer0Galaxy сказал:

Опыт подтверждает твои выводы:

 

4 часа назад, eu_tomat сказал:

не хуже должен быть вариант с использованием local floor=math.floor

Чекнул дополнительно пару известных вариантов округления. Топикстартеру респект за наиболее производительное решение:

Constant        0.017
Upvalue         0.023
math.floor      0.027
floor (no indexing)     0.025
Lua 5.3+: (num + 0.5) // 1        0.022
Lua 5.2+: num - num % 1         0.026

 

  • Нравится 1
  • Спасибо 1
  • В шоке 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
2 часа назад, ECS сказал:

Чекнул дополнительно пару известных вариантов округления.

Что-то у тебя интервал времени получился крошечный. Там погрешность получается большая. Возьмём интервал побольше.

 

Код:

Скрытый текст

local uptime=os.clock

local function round1(num)
    return num + (2 ^ 52 + 2 ^ 51) - (2 ^ 52 + 2 ^ 51)
end

local huge = 2 ^ 52 + 2 ^ 51
local function round2(num)
    return num + huge - huge
end

n = 2e7

os.sleep(0.05)start=uptime()
for i=1,n do
  round1(1.234)
end
print("Constant ",uptime()-start)

os.sleep(0.05)start=uptime()
for i=1,n do
  round2(1.234)
end
print("Upvalue ",uptime()-start)

os.sleep(0.05)start=uptime()
for i=1,n do
  math.floor(1.234+0.5)
end
print("math.floor ",uptime()-start)

local floor=math.floor

os.sleep(0.05)start=uptime()
for i=1,n do
  floor(1.234+0.5)
end
print("local floor ",uptime()-start)

local function round3(num)
  return (num+0.5)//1
end

os.sleep(0.05)start=uptime()
for i=1,n do
  round3(1.234)
end
print("(num+0.5)//1 ",uptime()-start)

 

Результат:

Скрытый текст

NaIVxIx.png

Итог: лучшее время стабильно показывает local floor=math.floor

Версия мода OpenComputers-MC1.7.10-1.7.5.1290-universal.jar

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
6 минут назад, eu_tomat сказал:

Что-то у тебя интервал времени получился крошечный. Там погрешность получается большая

Интервал зависит от кол-ва итераций, а оно такое же, как в примере Zer0Galaxy. Тестил я на десктопном некомпилируемом Lua 5.3.1, лень кубач было ставить. Не нравится? Да пожалуйста, вон результат на 2e7 итераций:

Constant        1.152
Upvalue         1.375
math.floor      1.749
floor (no indexing)     1.425
Lua 5.3+: num + 0.5 // 1        1.524
Lua 5.2+: num - num % 1         1.733

И на опенкомпах:

 

image.png.8fe5e2f722501522215a38a8129d8854.png

 

Один фиг победа за первым методом

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
1 минуту назад, ECS сказал:

Один фиг победа за первым методом

Что-то не бьются у нас результаты. Какая у тебя версия OpenComputers?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в тему...

×   Вы вставили отформатированное содержимое.   Удалить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.


×
×
  • Создать...