admin

Вычисляем число Пи на разных платформах!

15 сообщений в этой теме

admin    2 240

В этом ролике мы заставим вычислять число ПИ следующие платформы: Arduino, TPS, STM32, Pentium 1, Raspberry PI 3, Intel Atom. Кто победит? Узнаете в конце видео!

Проекты Arduino и Raspberry PI на сайте: http://cxem.net/arduino/arduino.php
Более 400 проектов на микроконтроллерах: http://cxem.net/mc/mc.php

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


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

Быстрый заказ печатных плат

Полный цикл производства PCB по низким ценам!

  • x
    мм
Заказать Получить купон на $5.00
BARS_    560
12 минуты назад, admin сказал:

Arduino

Это не платформа. Платформа, в данном случае, AVR. 

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


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

Исходник с математикой выложить, религия не позволяет?) Ну и как я понял число пи просто вычисляется n-тысяч раз. Но какой в этом смысл забивать одини и теми же числами при том что результат будет линей маштабироваться 1, 1000, 10000 раз посчитать?.. Имеет смысл как в SuperPI считать само число ПИ до n-го разряда))

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

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


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

Это не платформа. Платформа, в данном случае, AVR. 

Ну если все это пояснять под видео и в заставке, то получился бы длинный и нудный список пояснений. Отладочная плата Arduino на базе AVR, платформа AVR, персональный компьютер Pentium 1, компьютер Intel Atom и т.д. Я думаю про ардуино это и так очевидно

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


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

Ну и как я понял число пи просто вычисляется n-тысяч раз. Но какой в этом смысл забивать одини и теми же числами при том что результат будет линей масштабироваться 1, 1000, 10000 раз посчитать?.. Имеет смысл как в SuperPI считать само число ПИ до n-го разряда))

Так и делает автор, проводит несколько экспериментов - сначала до 10 знака после запятой считает, потом до 100-го знака и т.д.

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


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

Выложите пожалуйста исходники алгоритмов, нам то же хочется фигнёй пострадать...

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


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

Отладочная плата Arduino на базе AVR

Достаточно сказать, что платформа AVR

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


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

Да согласен напутал определения семейство и платформа... В общем, кому интересно вод код, который запускал на linux системах (малинка и нетбук).

#include <math.h>
#include <stdio.h>
#include <time.h>
#define N 5000

int main()
{
  int len = floor(10 * N/3) + 1;
  char A[len];
  clock_t tim;
  tim = clock();
  for(int i = 0; i < len; ++i) {
    A[i] = 2;
  }

  char nines    = 0;
  char predigit = 0;

  for(int j = 1; j < N + 1; ++j) {        
    int q = 0;

    for(int i = len; i > 0; --i) {
      int x  = 10 * A[i-1] + q*i;
      A[i-1] = x % (2*i - 1);
      q = x / (2*i - 1);
    }

    A[0] = q%10;
    q    = q/10;

    if (9 == q) {
      ++nines;
    }
    else if (10 == q) {
      printf("%d", predigit + 1);

      for (int k = 0; k < nines; ++k) {
        printf("%d", 0);
      }
      predigit, nines = 0;
    }
    else {
      printf("%d", predigit);
      predigit = q;

      if (0 != nines) {    
        for (int k = 0; k < nines; ++k) {
          printf("%d", 9);
        }

        nines = 0;
      }
    }
  }
  	printf("%d", predigit);
 	tim = clock()-tim;
	printf ("\nTime : %f\n",((double)tim)/CLOCKS_PER_SEC);
	
  return 0;
}

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

И да, код я скопировал с какого-то англоязычного сайта, но вроде работает нормально.:rolleyes:

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


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

но вроде работает нормально

А не должен бы.

char A[len];

Определение массива должно быть только константой.  То есть len везде надо заменить на N и закоментировать int len = floor(10 * N/3) + 1;

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


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

Продолжение:

Пи Тест. Кто быстрее? AT91SAM9XE512, Raspberry PI 3, Pentium 1, Omega 2 или ESP8266. В этом видео все платформы вычислят число ПИ, и мы узнаем, кто лучше!

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


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

Для тестирования ESP8266 ( и возможно ESP32) использовать этот код. Кстати, этот код же можно использовать под другие платформы, самое важное улучшение по сравнению с оригинальным кодом (не влияет на быстроту исполнения, но предупреждает вылеты) рабочий массив чисел перенесен в свободную оперативку ( A=(uint8_t*) malloc(len); )


#include <ESP8266WiFi.h>
#include <math.h>
#ifdef ESP8266
extern "C" {
#include "user_interface.h"
}
#endif
#define N 10000
//#define ENABLE_PRINT

void setup(void) {
    Serial.begin(921600);
    system_update_cpu_freq(SYS_CPU_160MHZ);
}

void loop() {
  uint32_t len = floor(10 * N/3) + 1;
  uint32_t freeM = system_get_free_heap_size();
  Serial.print("Free memory:");
  Serial.println(freeM);
  Serial.print("buffer length:");
  Serial.println(len);
  delay(1000);
  uint8_t* A;
  uint8_t have_a_rest_timeout=20;
  A=(uint8_t*) malloc(len);
  freeM = system_get_free_heap_size();
  Serial.print("Free memory:");
  Serial.println(freeM);
  unsigned long tim;
  tim = millis();
  memset(A,2,len);

  int nines    = 0;
  int predigit = 0;

  for(uint16_t j = 1; j < N + 1; ++j) {
    int q = 0;

    for(uint16_t i = len; i > 0; --i) {
      int x  = 10 * A[i-1] + q*i;
      A[i-1] = x % (2*i - 1);
      q = x / (2*i - 1);
      //yield();
    }
    have_a_rest_timeout--;
    if (!have_a_rest_timeout){
      have_a_rest_timeout=20;
      yield();
    }


    A[0] = q%10;
    q    = q/10;

    if (9 == q) {
      ++nines;
    }
    else if (10 == q) {
      #ifdef ENABLE_PRINT
      Serial.print(predigit + 1);
      #endif

      for (uint16_t k = 0; k < nines; ++k) {
        #ifdef ENABLE_PRINT
        Serial.print("0");
        #endif

      }
      predigit, nines = 0;
    }
    else {
      #ifdef ENABLE_PRINT
      Serial.print(predigit);
      #endif
      predigit = q;

      if (0 != nines) {
        for (uint16_t k = 0; k < nines; ++k) {
          #ifdef ENABLE_PRINT
          Serial.print("9");
          #endif
        }

        nines = 0;
      }
    }
  }
  free(A );
  #ifdef ENABLE_PRINT
  Serial.println(predigit);
  #endif
 	tim = millis()-tim;
  Serial.print("Time : ");
  Serial.println(tim/1000.0f,4);
    delay(5000);
}

П.С. Могу так же протестировать на Orange Pi Lite

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


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

как узнать что идет парралельное вычисление что задействованы все физические и логические ядра процессора ?

вот бы кто нибудь попробовал на 12 ядерном ксеоне прогнать чтоб точно узнать,

просто не может быть чтоб малина 3 была медленнее атома у малины 4 ядра 1200мгц у атома одно и на нем 2

логических потока, а результаты подозрительные,

на Linux в баше прогоняю тест пи классическим способом

time echo "scale=10000; 4*a(1)" | bc -l > /dev/null

потом затестю сжатие xz -zkv -T 4 в нем можно принудительно потоки создавать

поэтому более достоверные показатели,

максимальная выжимка мощности из кристалла тут
https://setiathome.berkeley.edu/cpu_list.php

CPU model  Number of computers,	Avg. cores/computer, GFLOPS/core, GFLOPs/computer

=================================================================
ARMv8 Processor rev 2 (v8l)            18    4.00 	1.26 	5.03

Intel(R) Atom(TM) CPU N270 @ 1.60GHz
[Family 6 Model 28 Stepping 2]         105   2.00 	0.70 	1.39

 

Изменено пользователем anyone24
SETI benchmark

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


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

Ваша публикация должна быть проверена модератором

Гость
Вы не авторизованы. Если у вас есть аккаунт, пожалуйста, войдите.
Ответить в тему...

×   Вставлено в виде отформатированного текста.   Восстановить форматирование

  Разрешено не более 75 смайлов.

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

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

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

Загрузка...

  • Сообщения

    • Ну это ж логично. Скрещивать разной убитости АБ, или разного типа - нонсенс какой то. Интересная у вас работа.
    • Если сбросить провод с движка , будет звук или магнитола его через некоторое время его блокирует ? Если будет продолжать работать, то вам от "кассетника" надо будет оставить только переключатель режимов, который срабатывает, когда вы кассету в аппарат вставляете.  
    • Сорри, был занят. Да. Надо купить или выпаять откуда-нибудь... 250В на крайняк сойдёт.
      Импульс высокочастотный - ну, 0.015-0.022мкф можно попробовать. 4n7-6n8... 10n - стандарт везде. Что параллельно выключателю, что параллельно реле. Не надо.  Ничего не найдёшь на новом... Обычно на выключателе (контактах реле) подгорают контакты. Это не показатель. Небось китай?
    • Благодарю, @fant Вот этого автор вопроса как раз не уточнил, равно как и износ каждого аккумулятора. Поэтому разыгралась фантазия по поводу возможных последствий. А то, что их можно собирать в параллель, причем в неограниченном количестве, я хорошо понимаю. Скоро на одной ГЭСке генераторы разной мощности буду вводить в параллель с сетью. Вот это более интересная задача )))))
    • А это уже новая вводная. Разный саморазряд. Изначально ( лень крутить вверх) задавалась разная ёмкость. Но одинаковое напряжение и тип одинаковый, естественно.  Дохлый акуммулятор, естественно будет тянуть заряд из здорового, увеличивая саморазряд. Если АБ одного типа, но разной ёмкости, то абсолютно  не вижу причин почему им не работать в параллель. Единственно, желательно, но не критично, зарядить каждый АБ отдельно до уровня полного заряда или разрядить до отсечки, что бы уровнять напряжения. Затем сделать параллель и пользоваться. Общая ёмкость = сумма ёмкостей всех АБ, включённых параллельно.  На "фонарёвке" экспериментировали, особых проблем не обнаружили. Даже, цепляли меж собой заряженный и разряженный АБ. "Бабахов" так же не случалось. Токи, как для заряженного, так и разряженного не превышали допустимые. Причём высокими они были пару - тройку минут, потом спадали до не критичных.  О, даже эту тему обнаружил. ТЫЦ.
    • Да, собственно, ни в чем. Только с чего Вы взяли, что мне что-то "мешает" ))))) Я лишь выразил предположения, основываясь как раз на законы Кирхгофа.