powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Караул!
5 сообщений из 5, страница 1 из 1
Караул!
    #39054736
Владимир2012
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TmaytonХорошие новости коллеги.

Судя по коммитам R-Wolf нам заделал поддержку языка rust. У кого есть среда или компиллер?
Тут все есть Поставил в линуксе с первой попытки.

Вот результаты в линуксе с учетом последних изменений. Лог тут
Lang Time s Time % MSED (gdc 4.9.2) 0:11.630 96.3%4.4C++ RWolf (g++ 4.9.2) 0:11.715 97.0%0Rust 1.2.0 0:11.808 97.8%4.4C++ (g++ 4.9.2) 0:12.075 100.0%Java 1.8.0 0:14.622 121.1%4.4Free Pascal (fpc 2.6.4) 0:28.807 238.6%4.8C# (mono 3.2.8) 0:39.010 323.1%5.7GO (go 1.3.3) 0:26.628 220.5%4.4Nodejs v4.0.0 0:49.340 408.6%4.4PyPy (2.5.0) 1:42.598 849.7%4.4PHP 5.6.4 53:42.35026686.1%4.4Python 2.7.9 117:56.17158601.8%4.4

Тяпничный бенчмарк CPU (part-1) http://www.sql.ru/forum/1173809-27/tyapnichnyy-benchmark-cpu-part-1
...
Рейтинг: 0 / 0
Караул!
    #39054742
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Шеф, всё пропало, все пропало! Гипс снимают, клиент уезжает… (с)
...
Рейтинг: 0 / 0
Караул!
    #39055122
Владимир2012
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PHP то эпизодически использую в работе
...
Рейтинг: 0 / 0
Караул!
    #39055137
Владимир2012
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sorry.

PHP, JavaScript, Perl эпизодически использую в работе ..., но однозначно не считаю себя в них профи.
Но array в C++, JavaScript и PHP имеют существенные различия в реализациях.
Поэтому не правильно будет взять скажем код C++ и путем правок получить "эквивалентный" код на PHP.
Потому как ... /skip -2 стоке выше/.
Вообщем то интересно и полезно было бы, что бы код теста посмотрели профи PHP и Python и ...

PS: Неужели такой контраст в производительности по сравнению с C++?
...
Рейтинг: 0 / 0
Караул!
    #39055810
Владимир2012
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
http://sourceforge.net/p/card-raytracer-bench/code/HEAD/tree/

Код не мой.

Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
153.
154.
155.
156.
157.
158.
159.
160.
161.
162.
163.
164.
165.
166.
167.
168.
169.
170.
171.
172.
173.
<?php

const WIDTH = 512;
const HEIGHT = 512;

final class Vector {
        public $x = .0;
        public $y = .0;
        public $z = .0;

        public function __construct($a, $b, $c) {
                $this->x = $a;
                $this->y = $b;
                $this->z = $c;
        }

        public function sum($r) {
                return new Vector($this->x + $r->x, $this->y + $r->y, $this->z + $r->z);
        }

        public function prod($r) {
                return new Vector($this->x * $r, $this->y * $r, $this->z * $r);
        }

        public function sprod($r) {
                return $this->x * $r->x + $this->y * $r->y + $this->z * $r->z;
        }

        public function vprod($r) {
                return new Vector(
                        $this->y * $r->z - $this->z * $r->y,
                        $this->z * $r->x - $this->x * $r->z,
                        $this->x * $r->y - $this->y * $r->x
                );
        }

        public function norm() {
                $fix = 1 / sqrt(
                        $this->x * $this->x +
                        $this->y * $this->y +
                        $this->z * $this->z
                );

                return new Vector($this->x * $fix, $this->y * $fix, $this->z * $fix);
        }
}

$G = [
        0x0003C712,  // 00111100011100010010
        0x00044814,  // 01000100100000010100
        0x00044818,  // 01000100100000011000
        0x0003CF94,  // 00111100111110010100
        0x00004892,  // 00000100100010010010
        0x00004891,  // 00000100100010010001
        0x00038710,  // 00111000011100010000
        0x00000010,  // 00000000000000010000
        0x00000010,  // 00000000000000010000
];

$RANDMAX = getrandmax();

function rnd() {
        global $RANDMAX;
        return rand() / $RANDMAX;
}

$v0 = new Vector(0, 0, 1);

function tracer($o, $d, &$n, &$t) {
        global $v0, $G;

        $t = 1e9;
        $m = 0;
        $p = -$o->z / $d->z;

        if (.01 < $p) {
                $t = $p;
                $n = $v0;
                $m = 1;
        }

        for ($k = 19; $k--;) {
                for ($j = 9; $j--;) {
                        if ($G[$j] & 1 << $k) {
                                $p = $o->sum(new Vector(-$k, 0, -$j - 4));
                                $b = $p->sprod($d);
                                $c = $p->sprod($p) - 1;
                                $q = $b * $b - $c;
                                if ($q > 0) {
                                        $s = -$b - sqrt($q);
                                        if (($s < $t) && ($s > .01)) {
                                                $t = $s;
                                                $n = $p->sum($d->prod($t))->norm();
                                                $m = 2;
                                        }
                                }
                        }
                }
        }
        return $m;
}

$v1 = new Vector(.7, .6, 1);
$v2 = new Vector(3, 1, 1);
$v3 = new Vector(3, 3, 3);
$v4 = new Vector(0, 0, 0);

function sampler($o, $d) {
        global $v1, $v2, $v3, $v4;

        $t = 0;
        $n = null;

        $m = tracer($o, $d, $n, $t);
        if (!$m) {
                return $v1->prod(pow(1 - $d->z, 4));
        }

        $h = $o->sum($d->prod($t));
        $l = (new Vector(9 + rnd(), 9 + rnd(), 16))->sum($h->prod(-1))->norm();
        $r = $d->sum($n->prod($n->sprod($d) * -2));

        $b = $l->sprod($n);
        if ($b < 0 || tracer($h, $l, $n, $t)) {
                $b = 0;
        }

        if ($m & 1) {
                $h = $h->prod(.2);
                $olo = (((int)(ceil($h->x) + ceil($h->y)) & 1)
                        ? $v2
                        : $v3
                );
                return $olo->prod($b * .2 + .1);
        }

        $p = ($b > 0) ? pow($l->sprod($r), 99) : 0;

        $olo = (($b > 0) ? new Vector($p, $p, $p) : $v4);
        return $olo->sum(sampler($h, $r)->prod(.5));
}

$v5 = new Vector(13, 13, 13);
$v6 = new Vector(17, 16, 8);

function main() {
        global $v5, $v6;

        printf('P6 %d %d 255 ', WIDTH, HEIGHT);

        $g = (new Vector(-6, -16, 0))->norm();
        $a = (new Vector(0, 0, 1))->vprod($g)->norm()->prod(.002);
        $b = $g->vprod($a)->norm()->prod(.002);
        $c = $a->sum($b)->prod(-256)->sum($g);

        for ($y = HEIGHT; $y--;) {
                for ($x = WIDTH; $x--;) {
                        $p = $v5;
                        for ($r = 64; $r--;) {
                                $t = $a->prod((rnd() - .5) * 99)->sum($b->prod((rnd() - .5) * 99));

                                $p = sampler($v6->sum($t),
                                        $t->prod(-1)->sum($a->prod(rnd() + $x)->sum($b->prod(rnd() + $y))->sum($c)->prod(16))->norm()
                                )->prod(3.5)->sum($p);
                        }
                        printf('%c%c%c', $p->x, $p->y, $p->z);
                }
        }
}

main();

?>



Для начала:

- параметры не по ссылке передаются.
Да и запись длинных арифметических выражений в параметрах /на мой взгляд/ здесь с ни к чему
- ...

PS: Вообщем сильно сомневаюсь в оптимальности этого php кода.
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Караул!
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]