Улучшение производительности устройства.

AleksRisov
Offline
Зарегистрирован: 24.03.2021

Добрый день всем Aрдуинщикам)

Собрал Фермочку на шести МК ATmega328P.) К сожалению выдает всего 720 Хэшей в секунду фармит

монету Duino-Coin .

Потребление 1.5 ват. 

Может быть кто нибудь предложить способ увеличение производительности по отношению к мощности?

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Использовать более адекватную аппаратную начинку. Например, видеокарту.

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

Кварц на гигагерц сделай, питания дай побольше и охлаждай жидким азотом. 

Люди, откуда вы такие на свет лезете? 

AleksRisov
Offline
Зарегистрирован: 24.03.2021

""Люди, откуда вы такие на свет лезете?""

https://explorer.duinocoin.com  Судя по статистике пула 17% Трафика идет через МК Ардуино.

Может кто знает можно ли данную программу эмулировать на каких нибудь ПЛИС.

//////////////////////////////////////////////////////////
//  ____        _                    ____      _       
// |  _ \ _   _(_)_ __   ___        / ___|___ (_)_ __  
// | | | | | | | | '_ \ / _ \ _____| |   / _ \| | '_ \ 
// | |_| | |_| | | | | | (_) |_____| |__| (_) | | | | |
// |____/ \__,_|_|_| |_|\___/       \____\___/|_|_| |_|
//  Code for Arduino boards v1.9
//  © Duino-Coin Community 2019-2021
//  Distributed under MIT License
//
//  If you don't know how to start,
//  visit our official website (duinocoin.com)
//  and navigate to the Getting Started page for help.
//  Happy mining!
//////////////////////////////////////////////////////////
//  https://duinocoin.com - Official Website
//  https://github.com/revoxhere/duino-coin - Official GitHub
//  https://discord.gg/k48Ht5y - Official Discord server
//  https://github.com/revoxhere - @revox (Lead Duino-Coin developer)
//  https://github.com/daknuett - @daknuett (Thanks for help in library migration!
//  https://github.com/JoyBed - @JoyBed (Big thanks for many optimizations!)
//////////////////////////////////////////////////////////

// If uncommented, the count is reversed.
// This allows to not repeat searching the same numbers twice if you have a second Arduino searching the "conventional" way
// and possibly increase efficiency of multi-Arduino setup.
#define REVERSE_SEARCH

// Include SHA1 part of cryptosuite2 library
#include "sha1.h"

String result; // Create globals
char buffer[64] = "";
unsigned int iJob = 0;

void setup() {
  pinMode(LED_BUILTIN, OUTPUT); // Prepare built-in led pin as output
  Serial.begin(115200); // Open serial port
  if (Serial.available()) {
    Serial.println("ready"); // Send start word to miner program
  }
}

void loop() {
  String startStr = Serial.readStringUntil('\n');
  if (startStr == "start") { // Wait for start word, serial.available caused problems
    Serial.flush(); // Clear serial buffer
    String hash = Serial.readStringUntil('\n'); // Read hash
    String job = Serial.readStringUntil('\n'); // Read job
    unsigned int diff = Serial.parseInt() * 100 + 1; // Read difficulty
    unsigned long StartTime = micros(); // Start time measurement
    #ifdef REVERSE_SEARCH
    for (unsigned int iJob = diff; iJob >= 0; iJob--) { // Reversed difficulty loop
    #else
    for (unsigned int iJob = 0; iJob < diff; iJob++) { // Difficulty loop
    #endif
      Sha1.init(); // Create SHA1 hasher
      Sha1.print(String(hash) + String(iJob));
      uint8_t * hash_bytes = Sha1.result(); // Get result
      for (int i = 0; i < 10; i++) { // Cast result to array
        for (int i = 0; i < 32; i++) {
          buffer[2 * i] = "0123456789abcdef"[hash_bytes[i] >> 4]; // MSB to LSB (Depending on the address in hash_bytes)
          // Choose that from the given array of characters
          buffer[2 * i + 1] = "0123456789abcdef"[hash_bytes[i] & 0xf]; // Retreve the value from address next spot over
        }
      }
      result = String(buffer); // Convert and prepare array
      result.remove(40); // First 40 characters are good, rest is garbage
      if (String(result) == String(job)) { // If result is found
        unsigned long EndTime = micros(); // End time measurement
        unsigned long ElapsedTime = EndTime - StartTime; // Calculate elapsed time
        Serial.println(String(iJob) + "," + String(ElapsedTime)); // Send result back to the program with share time
        PORTB = PORTB | B00100000;   // Turn on built-in led
        delay(25); // Wait a bit
        PORTB = PORTB & B11011111; // Turn off built-in led
        break; // Stop the loop and wait for more work
      }
    }
  }
}

 

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

тиресно, как ты 

Include SHA1 part of cryptosuite2 library

в PLM засуёшь

AleksRisov
Offline
Зарегистрирован: 24.03.2021

Это да((

 

AleksRisov
Offline
Зарегистрирован: 24.03.2021

""Использовать более адекватную аппаратную начинку. Например, видеокарту.""

На них этот алгоритм не работает.(

sadman41
Offline
Зарегистрирован: 19.10.2016

Майнинг, PORTB и String? Ничесе.

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

AleksRisov пишет:

""Использовать более адекватную аппаратную начинку. Например, видеокарту.""

На них этот алгоритм не работает.(

Видеокарты уже лет как 15 могут выполнять любые алгоритмы.

AleksRisov
Offline
Зарегистрирован: 24.03.2021

Есть 56шт (ATmega328) но толку нет кпд маленькое. Надо ASIC на чем нибудь другом собирать. Есть EPM3032 ,

STM32F4.

mixail844
Offline
Зарегистрирован: 30.04.2012

я думал ТС прикалываеться :D:D ,а оно вон как

b707
Offline
Зарегистрирован: 26.05.2017

mixail844 пишет:

я думал ТС прикалываеться...

...а он и в правду спятил

 

AleksRisov
Offline
Зарегистрирован: 24.03.2021

Ага))

 

AleksRisov
Offline
Зарегистрирован: 24.03.2021

ATmega328 работает на максимальной тактовой в 37мГц при напряжении в 7.2В

ATmega2560 не дает прироста и.т.п

 

 

AleksRisov
Offline
Зарегистрирован: 24.03.2021

ESP8266-150000H/S

b707
Offline
Зарегистрирован: 26.05.2017

тв не, точно троллинг, это даже компилироваться не должно:

 buffer[2 * i] = "0123456789abcdef"[hash_bytes[i] >> 4]; 

изящный способ выстрелить себе в ногу - назвать итераторы двух вложенных циклов одной и той же буквой:

for (int i = 0; i < 10; i++) { // Cast result to array
        for (int i = 0; i < 32; i++) {
          buffer[2 * i] = "0123456789abcdef"[hash_bytes[i] >> 4]; // MSB to LSB (Depending on the address in hash_bytes)
          // Choose that from the given array of characters
          buffer[2 * i + 1] = "0123456789abcdef"[hash_bytes[i] & 0xf]; // Retreve the value from address next spot over
        }
      }

и потом гадать, какую же именно из двух i имел в виду автор...

В общем, код - мусор

Да и вся тема тоже.

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

AleksRisov пишет:

ATmega328 работает на максимальной тактовой в 37мГц при напряжении в 7.2В

ATmega2560 не дает прироста и.т.п

Так Вам нужно увеличивать энергоэффективность или уменьшить ее?

Если увеличить, наоборот, тактовую частоту и напряжение нужно снижать.

AleksRisov
Offline
Зарегистрирован: 24.03.2021

Для компиляции там доп файлы вот ссылка  https://github.com/revoxhere/duino-coin/releases/tag/2.2

внизу для WINDOWS там папка Arduino_Code в ней фаил Arduino_Code.ino

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

AleksRisov пишет:

Для компиляции там доп файлы вот ссылка  https://github.com/revoxhere/duino-coin/releases/tag/2.2

внизу для WINDOWS там папка Arduino_Code в ней фаил Arduino_Code.ino

И зачем это все?

b707
Offline
Зарегистрирован: 26.05.2017

цитата

NOTICE: .exe binaries may be detected as a virus by your antivirus software.

 

Тогда все понятно :)))

 

AleksRisov - вы в С++ вообще не в зуб ногой?? Я вам конкретные строчки показал - в них полный бред. Какие библиотеки не подставляй, это компилироваться не будет.

Шли бы вы лесом, не забивайте конфу ерундой. Гербалайфа мне и в почте хватает

 

Rumata
Rumata аватар
Offline
Зарегистрирован: 29.03.2019

Вот беда. Добрались и до ардуин майнеры. Ну, теперь не за горами $100 за ардуино нано на али ((

Хорошо, что запасся на годы этим добром))

AleksRisov
Offline
Зарегистрирован: 24.03.2021

И так все таки на ваш взгляд можно с этой информацией на МК Ардуино и совместимых платах и контроллерах норм устройство изготовить или целесообразнее виртуальный сервер снять напрокат и с него качать? Купить эти "дуки" ее не вариант только продать получается!

b707
Offline
Зарегистрирован: 26.05.2017

вот это тоже шикарный код :)))

PORTB = PORTB | B00100000;   // Turn on built-in led
        delay(25); // Wait a bit
        PORTB = PORTB & B11011111; // Turn off built-in led

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

А ТС либо дурак, если он в этом только юзер, либо мошенник, если один из затравщиков аферы.

Думаю, ветку надо закрыть

AleksRisov
Offline
Зарегистрирован: 24.03.2021

Попробуй все работает версия arduino-1.8.6

Проверено на всех Типах ардуино которые у меня есть даже U4 подходит.

 

b707
Offline
Зарегистрирован: 26.05.2017

AleksRisov пишет:

И так все таки на ваш взгляд можно с этой информацией на МК Ардуино и совместимых платах и контроллерах норм устройство изготовить

я вам конкретный вопрос задал - вы язык Си знаете? Что сами-то думаете о этом коде?

 

 

mixail844
Offline
Зарегистрирован: 30.04.2012
мне вот интересно , откуда в ардуино появляються "задачи" для расчета хеша ? 
 
так же считаю , ТС, либо тролль либо мошенник(мамкин хацкер) , ни на один вопрост b707а не ответил .
 
Serial.println(String(iJob) + "," + String(ElapsedTime)); // Send result back to the program with share time
тоже к производительности не добавляет
b707
Offline
Зарегистрирован: 26.05.2017

AleksRisov пишет:

Попробуй все работает версия arduino-1.8.6

если ты рассчитываешь на этом хотя бы 10 копеек заработать - тебе к псизиатру. Иди лучше работай

AleksRisov
Offline
Зарегистрирован: 24.03.2021

Мигание одним светодиодом в порту по адресу во время отправки хэша.

 

b707
Offline
Зарегистрирован: 26.05.2017

кста, не отвлекаясь от того, что ТС - псих... вопрос по коду

Проверил, вот это, к моему изумлению,  таки компилируется:

buffer[2 * i] = "0123456789abcdef"[hash_bytes[i] >> 4]; 

кто-нить может обьяснить, почему?

AleksRisov
Offline
Зарегистрирован: 24.03.2021

Да и фик с вами пусть админ закроет тему!!!

 

b707
Offline
Зарегистрирован: 26.05.2017

AleksRisov пишет:

Мигание одним светодиодом в порту по адресу во время отправки хэша.

одним? точно?

На вопрос по знанию вами Си так и не ответили... хотя после этих комментариев и так все ясно уже

mixail844
Offline
Зарегистрирован: 30.04.2012

b707 пишет:

кста, не отвлекаясь от того, что ТС - псих... вопрос по коду

Проверил, вот это, к моему изумлению,  таки компилируется:

buffer[2 * i] = "0123456789abcdef"[hash_bytes[i] >> 4]; 

кто-нить может обьяснить, почему?

собсна , а почему нет? вас смущает "0123456789abcdef"[index] ? 
 
полагаю что создаеться анонимный массив, и там уже идет доступ по индексу.
 
вас же бы не смутило  : 
 
uint8_t chrArr[] = "abcdefghijklmnop";
uint8_t chr = chrArr[5];
?

 

 

 

wdrakula
wdrakula аватар
Offline
Зарегистрирован: 15.03.2016

b707 пишет:

кста, не отвлекаясь от того, что ТС - псих... вопрос по коду

Проверил, вот это, к моему изумлению,  таки компилируется:

buffer[2 * i] = "0123456789abcdef"[hash_bytes[i] >> 4]; 

кто-нить может обьяснить, почему?

а что не так? Почему не должно?

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

b707 пишет:

это даже компилироваться не должно:

Почему? Не вижу особой проблемы. Использование одного и того же индекса - конечно, говнокод, но вполне предсказуемый - понятно как оно там всё работает. Должно всё нормально компилироваться и работать.

b707
Offline
Зарегистрирован: 26.05.2017

mixail844 пишет:

собсна , а почему нет? вас смущает "0123456789abcdef"[index] ? 
 
полагаю что создаеться анонимный массив, и там уже идет доступ по индексу.
 
вас же бы не смутило  : 
 
uint8_t chrArr[] = "abcdefghijklmnop";
uint8_t chr = chrArr[5];

ну да, именно это и смущает. Можно прям от строки индекс брать? - не знал

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

b707 пишет:

ктаки компилируется:

buffer[2 * i] = "0123456789abcdef"[hash_bytes[i] >> 4]; 

кто-нить может обьяснить, почему?

А чего объяснять? Выражение "0123456789abcdef" имеет тип char[17]. А далее к этому выражению применяется вполне легальная для такого типа операция взятия элемент по индексу [].

b707
Offline
Зарегистрирован: 26.05.2017

ЕвгенийП пишет:

Почему? Не вижу особой проблемы.

использование одного и того же индекса - это мне понятно, это в пределах синтаксиса, а вот взятие индекса прям от закавыченный строки - такого раньше не видал

b707
Offline
Зарегистрирован: 26.05.2017

Спасибо всем за обьяснения

b707
Offline
Зарегистрирован: 26.05.2017

AleksRisov пишет:

И так все таки на ваш взгляд можно с этой информацией на МК Ардуино и совместимых платах и контроллерах норм устройство изготовить или целесообразнее виртуальный сервер снять напрокат

хорошо, если считать что код рабочий...

Если запустить этот код на старом ПК ценой в 5 тыс рублей - по скорости(в самой грубой прикидке) он будет работать как 300 ардуинок ценою в 60 тыр

делайте выводы...

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

DetSimen пишет:

Кварц на гигагерц сделай, питания дай побольше и охлаждай жидким азотом. 

Люди, откуда вы такие на свет лезете? 

я кстати загрузчиком могу поделиться, для гигагерца тактовой )))

wdrakula
wdrakula аватар
Offline
Зарегистрирован: 15.03.2016

Для ТС:

Даже забыв про эффективность каждого мегагерца частоты на 8ми битной и 32 битной машине можно посчитать стоимость каждого МГц в амперах потребляемого тока, напряжением  - как в USB - 5В.

Ардуино Нано (Atmega328P) 9ma/8MHz - для 16 нет данных в ДШ, но пусть примерно также, то есть 1ма на 1МГц.

Allwinner H3 (Оранж пи) 500ма/(4х1500МГц) то есть 0.08ма на 1МГц. (ссылка на тест) более чем в 10 раз эффективнее. 

Нужно пользоваться головой, не только, как местом расположения ротового отверстия!

b707
Offline
Зарегистрирован: 26.05.2017

и еще немного про код

Вот тут-то я правильно понял

for (int i = 0; i < 10; i++) { // Cast result to array
        for (int i = 0; i < 32; i++) {
          buffer[2 * i] = "0123456789abcdef"[hash_bytes[i] >> 4]; // MSB to LSB (Depending on the address in hash_bytes)
          // Choose that from the given array of characters
          buffer[2 * i + 1] = "0123456789abcdef"[hash_bytes[i] & 0xf]; // Retreve the value from address next spot over
        }
      }

что автор десять раз сохраняет в цикле одни и те же значения? :) - суперэффективность получается...

Или я опять в лужу сел, как с индексом от строки?

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

wdrakula пишет:

Нужно пользоваться головой, не только, как местом расположения ротового отверстия!

согласен полностью, а то в далёком 1976 пара крепких бойцов кирпичи  оной разбивала, в дурке закончила...

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

ua6em пишет:

пара крепких бойцов кирпичи  оной разбивала, в дурке закончила...

Это всё потому что они не были счастливыми обладателями священной катушки. 

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

DetSimen пишет:

ua6em пишет:

пара крепких бойцов кирпичи  оной разбивала, в дурке закончила...

Это всё потому что они не были счастливыми обладателями священной катушки. 

думаешь помогла бы, что-то сомнения гложут )))

rkit
Offline
Зарегистрирован: 23.11.2016

AleksRisov пишет:

ASIC на чем нибудь другом собирать

AleksRisov пишет:

ASIC

AleksRisov пишет:

собирать

Юморист

89282486539
Offline
Зарегистрирован: 09.01.2022

если на AtMega328* то можешь чекнуть ядро gyverCore там можно разогнать (стандартный делитель 16 можно понизить до 4 с радиатором)

b707
Offline
Зарегистрирован: 26.05.2017

89282486539, с такими советами вам сразу на форум гайвера лучше, тут это моветон

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

89282486539 пишет:

если на AtMega328* то можешь чекнуть ядро gyverCore там можно разогнать (стандартный делитель 16 можно понизить до 4 с радиатором)

смысла нет, это придумано не для майнинга

sadman41
Offline
Зарегистрирован: 19.10.2016

Безумцы думают иначе. Уже месяц, как ютуб мне подкидывает "майнинг на Arduino". Дебилы собирают по несколько ардуин в блок... Так что скоро эта чума накроет ещё и недорогие МК.

BOOM
BOOM аватар
Offline
Зарегистрирован: 14.11.2018

Кабзда! И цены рванут в космос... ((