Перейти к содержанию

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


admin

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

В этом ролике мы заставим вычислять число ПИ следующие платформы: 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

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

Реклама: ООО ТД Промэлектроника, ИНН: 6659197470, Тел: 8 (800) 1000-321

20% скидка на весь каталог электронных компонентов в ТМ Электроникс!

Акция "Лето ближе - цены ниже", успей сделать выгодные покупки!

Плюс весь апрель действует скидка 10% по промокоду APREL24 + 15% кэшбэк и бесплатная доставка!

Перейти на страницу акции

Реклама: ООО ТМ ЭЛЕКТРОНИКС, ИНН: 7806548420, info@tmelectronics.ru, +7(812)4094849

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

Изменено пользователем Exp10der
Ссылка на комментарий
Поделиться на другие сайты

Выбираем схему BMS для заряда литий-железофосфатных (LiFePO4) аккумуляторов

Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ очень важен контроль процесса заряда и разряда для избегания воздействия внешнего зарядного напряжения после достижения 100% заряда. Инженеры КОМПЭЛ подготовили список таких решений от разных производителей. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

1 час назад, BARS_ сказал:

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

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

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

1 час назад, Exp10der сказал:

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

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

С уважением, Михаил, EEP Lab

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

Да согласен напутал определения семейство и платформа... В общем, кому интересно вод код, который запускал на 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:

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

Цитата

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

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

char A[len];

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

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

  • 5 месяцев спустя...

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

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

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

Для тестирования 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

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

  • 6 месяцев спустя...

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

вот бы кто нибудь попробовал на 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
Ссылка на комментарий
Поделиться на другие сайты

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

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

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

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

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

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

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

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

Загрузка...
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...