Автор Тема: Простейший тест на производительность.  (Прочитано 3818 раз)

Geniepro

  • Hero Member
  • *****
  • Сообщений: 1949
  • Знайте- истина в том, что повторено трижды подряд!
    • Просмотр профиля
Re: Простейший тест на производительность.
« Ответ #15 : Сентябрь 12, 2016, 08:22:53 pm »
Я скачал LLVM 3.7, но какой-то он неполноценный -- нет программы opt в нём...
to iterate is human, to recurse, divine

Салат «рекурсия»: помидоры, огурцы, салат…

valexey_u

  • Hero Member
  • *****
  • Сообщений: 3009
    • Просмотр профиля
Re: Простейший тест на производительность.
« Ответ #16 : Сентябрь 12, 2016, 08:29:37 pm »
Я скачал LLVM 3.7, но какой-то он неполноценный -- нет программы opt в нём...
Ну, таким образом простому пользователю сия опция не доступна :-) Так что вычеркиваем.
Y = λf.(λx.f (x x)) (λx.f (x x))

Geniepro

  • Hero Member
  • *****
  • Сообщений: 1949
  • Знайте- истина в том, что повторено трижды подряд!
    • Просмотр профиля
Re: Простейший тест на производительность.
« Ответ #17 : Сентябрь 12, 2016, 08:34:23 pm »
Так я не понял -- эти LLVM-овцы специально сделали версию LLVM под винду без оптимизатора? а зачем он тогда такой нужен?
to iterate is human, to recurse, divine

Салат «рекурсия»: помидоры, огурцы, салат…

Geniepro

  • Hero Member
  • *****
  • Сообщений: 1949
  • Знайте- истина в том, что повторено трижды подряд!
    • Просмотр профиля
Re: Простейший тест на производительность.
« Ответ #18 : Сентябрь 12, 2016, 09:45:06 pm »
Этот LLVM под винду вообще какой-то неполноценный -- стандартных инклудников нет, нифига не компилирует с++-ный тест, например...
to iterate is human, to recurse, divine

Салат «рекурсия»: помидоры, огурцы, салат…

valexey_u

  • Hero Member
  • *****
  • Сообщений: 3009
    • Просмотр профиля
Re: Простейший тест на производительность.
« Ответ #19 : Сентябрь 12, 2016, 10:03:29 pm »
LLVM и не должен вроде как компилировать С++, С++ компилирует clang++ же.
Y = λf.(λx.f (x x)) (λx.f (x x))

Geniepro

  • Hero Member
  • *****
  • Сообщений: 1949
  • Знайте- истина в том, что повторено трижды подряд!
    • Просмотр профиля
Re: Простейший тест на производительность.
« Ответ #20 : Сентябрь 12, 2016, 10:34:45 pm »
ну там есть clang++.exe, но нет обычных хедер-файлов. Например, нет никаких iostream.*, vector.*...
to iterate is human, to recurse, divine

Салат «рекурсия»: помидоры, огурцы, салат…

valexey_u

  • Hero Member
  • *****
  • Сообщений: 3009
    • Просмотр профиля
Re: Простейший тест на производительность.
« Ответ #21 : Сентябрь 14, 2016, 12:08:04 am »
Смеха ради реализовал версию на js. Отрабатывает за 3.4 секунды с выводом на консоль и 2.8 секунды без вывода. То есть работает быстрее чем ББ, и при этом является более безопасным (контроль за границами массива включен).
Y = λf.(λx.f (x x)) (λx.f (x x))

valexey_u

  • Hero Member
  • *****
  • Сообщений: 3009
    • Просмотр профиля
Re: Простейший тест на производительность.
« Ответ #22 : Сентябрь 14, 2016, 03:13:27 am »
обновленная инфа - 2 секунды js.
Y = λf.(λx.f (x x)) (λx.f (x x))

kkkk

  • Full Member
  • ***
  • Сообщений: 133
    • Просмотр профиля
Re: Простейший тест на производительность.
« Ответ #23 : Сентябрь 14, 2016, 09:14:14 pm »
А на своём трансляторе не пробовали?

kkkk

  • Full Member
  • ***
  • Сообщений: 133
    • Просмотр профиля
Re: Простейший тест на производительность.
« Ответ #24 : Сентябрь 14, 2016, 09:24:35 pm »
Я подредактировал CP-шный вариант для простого Оберона:
MODULE Bubble;

IMPORT Out;

CONST n = 40000;

PROCEDURE PrintAll(arr: ARRAY OF INTEGER);
VAR i: INTEGER;
BEGIN
FOR i := 0 TO LEN(arr) - 1 DO
Out.Int(arr[i], 0);
Out.Ln
END
END PrintAll;

PROCEDURE DoIt*;
VAR
arr : ARRAY n OF INTEGER;
i, j, tmp : INTEGER;
BEGIN

FOR i := 0 TO n - 1 DO
arr[i] := n-i
END;

PrintAll(arr);
Out.String("---");
Out.Ln;

FOR i:=0 TO n-1 DO
FOR j:=0 TO n-2-i DO
tmp := arr[j];
IF arr[j] > arr[j+1] THEN
arr[j] := arr[j+1];
arr[j+1] := tmp
END
END
END;

PrintAll(arr)
END DoIt;

BEGIN
DoIt
END Bubble.
И прогнал через свой неполноценный транслятор. Оказалось, что на нём до сих пор не был реализован FOR. После добавления поддержки, транслятор выдал такое:
#include <stdlib.h>
#include <stddef.h>
#include <assert.h>
#include <math.h>
#include <stdbool.h>

#define n_cnst 40000

static void PrintAll_(int arr_[/*len0*/], int arr_len0) {
int i_;

for (i_ = 0; i_ <= arr_len0 - 1; ++i_) {
Out_Int(arr_[i_], 0);
Out_Ln();
}
}

extern void Bubble_DoIt(void) {
int arr_[n_cnst];
int i_;
int j_;
int tmp_;

for (i_ = 0; i_ <= n_cnst - 1; ++i_) {
arr_[i_] = n_cnst - i_;
}
PrintAll_(arr_, n_cnst);
Out_String("---", 4);
Out_Ln();
for (i_ = 0; i_ <= n_cnst - 1; ++i_) {
for (j_ = 0; j_ <= n_cnst - 2 - i_; ++j_) {
tmp_ = arr_[j_];
if (arr_[j_] > arr_[j_ + 1]) {
arr_[j_] = arr_[j_ + 1];
arr_[j_ + 1] = tmp_;
}
}
}
PrintAll_(arr_, n_cnst);
}

extern int main(int argc, char **argv) {
Bubble_DoIt();
return 0;
}
При сборке gcc -O3
программа работает 2.19 секунд
для сравнения, c++ вариант отработал за 2.1
и стабильно выполняется быстрей.

valexey_u

  • Hero Member
  • *****
  • Сообщений: 3009
    • Просмотр профиля
Re: Простейший тест на производительность.
« Ответ #25 : Сентябрь 14, 2016, 09:34:07 pm »
А на своём трансляторе не пробовали?
Пробовали. Те же 2 секунды примерно.

В общем, обновлю на гитхабе инфу и тесты, можно будет воспроизводить.
Y = λf.(λx.f (x x)) (λx.f (x x))

valexey_u

  • Hero Member
  • *****
  • Сообщений: 3009
    • Просмотр профиля
Re: Простейший тест на производительность.
« Ответ #26 : Сентябрь 14, 2016, 09:36:01 pm »
Я подредактировал CP-шный вариант для простого Оберона:
...
И прогнал через свой неполноценный транслятор. Оказалось, что на нём до сих пор не был реализован FOR. После добавления поддержки, транслятор выдал такое:
...
При сборке gcc -O3
программа работает 2.19 секунд
для сравнения, c++ вариант отработал за 2.1
и стабильно выполняется быстрей.

А где-то можно пощупать транслятор?
gcc на данном варианте тормоз, лучше щупать clang++.
Y = λf.(λx.f (x x)) (λx.f (x x))

kkkk

  • Full Member
  • ***
  • Сообщений: 133
    • Просмотр профиля
Re: Простейший тест на производительность.
« Ответ #27 : Сентябрь 14, 2016, 09:40:11 pm »
Пока нигде, но скоро выложу на github.

kkkk

  • Full Member
  • ***
  • Сообщений: 133
    • Просмотр профиля
Re: Простейший тест на производительность.
« Ответ #28 : Сентябрь 14, 2016, 09:43:10 pm »
gcc на данном варианте тормоз, лучше щупать clang++.
Действительно, clang даёт результат 1.35

Geniepro

  • Hero Member
  • *****
  • Сообщений: 1949
  • Знайте- истина в том, что повторено трижды подряд!
    • Просмотр профиля
Re: Простейший тест на производительность.
« Ответ #29 : Сентябрь 15, 2016, 06:26:28 pm »
gcc на данном варианте тормоз, лучше щупать clang++.
Действительно, clang даёт результат 1.35
Выходит, что твой кросскомпилер Оберон->C более эффективен, чем компилятор Блекбокса? Тебе надо срочно перевести Блекбокс на твой компилятор ))) Всё русское оберон-сообщество тебе огромное спасибо скажет. Правда, не заплатит ни копейки )))
to iterate is human, to recurse, divine

Салат «рекурсия»: помидоры, огурцы, салат…