Сообщение Re[7]: Реальная производительность WebAssembly? от 17.09.2017 18:35
Изменено 17.09.2017 18:36 Pauel
Re[7]: Реальная производительность WebAssembly?
Здравствуйте, CoderMonkey, Вы писали:
CM>А давай ка посмотрим на более близкий к реальности код?
CM>Как это будет на JS?
CM>
К слову о реальности. В твоей, похоже, твой квиксорт вполне работает. гы-гы.
Вот порт 1-к-1 твоего кода с сохранением структуры и прочих вещей, кроме нескольких мелочей + необходимый фиксы
у меня время выполнения 8-10сек. Считать нужно не так, как у тебя, а по отдельности инициализацию и сортировку, потому как рантаймы отличаются очень сильно и при всем желании получить аналог твоих приседаний с гуидами не выйдет, тк в js отсутствует guid.
CM>А давай ка посмотрим на более близкий к реальности код?
CM>Как это будет на JS?
CM>
// нерабочий говнокод скипнут
CM>
К слову о реальности. В твоей, похоже, твой квиксорт вполне работает. гы-гы.
Вот порт 1-к-1 твоего кода с сохранением структуры и прочих вещей, кроме нескольких мелочей + необходимый фиксы
у меня время выполнения 8-10сек. Считать нужно не так, как у тебя, а по отдельности инициализацию и сортировку, потому как рантаймы отличаются очень сильно и при всем желании получить аналог твоих приседаний с гуидами не выйдет, тк в js отсутствует guid.
'use strict';
const N = 1000*1000;
const re = /-/g;
function Main(number) {
const watch = Date.now();
const vals = ToArray(Select(Range(0, number), x => new TestClass()));
const compare = (x, y) =>{
if(x === y)
return 0;
if(x > y)
return 1;
return -1;
};
console.warn(`Init, miliseconds: ${Date.now() - watch}`);
watch = Date.now();
QuickSort(vals, (x,y)=>compare(x.Id, y.Id));
console.warn(`Total miliseconds: ${Date.now() - watch}`);
}
function QuickSort(vals, compare){
QuickSortImpl(vals, compare, 0, vals.length - 1);
}
function QuickSortImpl (vals, compare, left, right) {
if (right <= left)
return;
let i = left;
let j = right;
const mid = Math.floor((left + right) / 2);
const midVal = vals[mid];
while (i <= j) {
while (compare(vals[i], midVal) > 0) {
i++;
}
while (compare(vals[j], midVal) < 0) {
j--;
}
if (i <= j) {
const tmp = vals[i];
vals[i] = vals[j];
vals[j] = tmp;
i++;
j--;
}
}
if(left < i - 1) {
QuickSortImpl(vals, compare, left, i - 1);
}
if(right > i) {
QuickSortImpl(vals, compare, i, right);
}
}
class TestClass {
constructor() {
this.Id = CreateGuid();
this.Value = CreateGuid();
}
toString() {
return this.Id;
}
}
function ToArray(iterator) {
return [...iterator];
}
function* Range(start, end) {
for(let i = start; i<end; i++) {
yield i;
}
}
function* Select(iterator, projector) {
for(let x of iterator) {
yield projector(x);
}
}
function CreateGuid() {
return NewGuid().toString().replace(re, "");
}
function NewGuid() {
function s4() {
return Math.floor((1 + Math.random()) * 0x10000)
.toString(16)
.substring(1);
}
return s4() + s4() + '-' + s4() + '-' + s4() + '-' +
s4() + '-' + s4() + s4() + s4();
}
function delay(time) {
return new Promise((resolve)=>{
setTimeout(resolve, time);
});
}
for(let i = 0, promise = Promise.resolve(); i<100;i++) {
promise = promise.then(()=>Main(N)).then(()=>delay(1000));
}
Re[7]: Реальная производительность WebAssembly?
Здравствуйте, CoderMonkey, Вы писали:
CM>А давай ка посмотрим на более близкий к реальности код?
CM>Как это будет на JS?
CM>
К слову о реальности. В твоей, похоже, твой квиксорт вполне работает. гы-гы.
Вот порт 1-к-1 твоего кода с сохранением структуры и прочих вещей, кроме нескольких мелочей + необходимый фиксы
Считать нужно не так, как у тебя, а по отдельности инициализацию и сортировку, потому как рантаймы отличаются очень сильно и при всем желании получить аналог твоих приседаний с гуидами не выйдет, тк в js отсутствует guid.
CM>А давай ка посмотрим на более близкий к реальности код?
CM>Как это будет на JS?
CM>
// нерабочий говнокод скипнут
CM>
К слову о реальности. В твоей, похоже, твой квиксорт вполне работает. гы-гы.
Вот порт 1-к-1 твоего кода с сохранением структуры и прочих вещей, кроме нескольких мелочей + необходимый фиксы
Считать нужно не так, как у тебя, а по отдельности инициализацию и сортировку, потому как рантаймы отличаются очень сильно и при всем желании получить аналог твоих приседаний с гуидами не выйдет, тк в js отсутствует guid.
'use strict';
const N = 1000*1000;
const re = /-/g;
function Main(number) {
const watch = Date.now();
const vals = ToArray(Select(Range(0, number), x => new TestClass()));
const compare = (x, y) =>{
if(x === y)
return 0;
if(x > y)
return 1;
return -1;
};
console.warn(`Init, miliseconds: ${Date.now() - watch}`);
watch = Date.now();
QuickSort(vals, (x,y)=>compare(x.Id, y.Id));
console.warn(`Total miliseconds: ${Date.now() - watch}`);
}
function QuickSort(vals, compare){
QuickSortImpl(vals, compare, 0, vals.length - 1);
}
function QuickSortImpl (vals, compare, left, right) {
if (right <= left)
return;
let i = left;
let j = right;
const mid = Math.floor((left + right) / 2);
const midVal = vals[mid];
while (i <= j) {
while (compare(vals[i], midVal) > 0) {
i++;
}
while (compare(vals[j], midVal) < 0) {
j--;
}
if (i <= j) {
const tmp = vals[i];
vals[i] = vals[j];
vals[j] = tmp;
i++;
j--;
}
}
if(left < i - 1) {
QuickSortImpl(vals, compare, left, i - 1);
}
if(right > i) {
QuickSortImpl(vals, compare, i, right);
}
}
class TestClass {
constructor() {
this.Id = CreateGuid();
this.Value = CreateGuid();
}
toString() {
return this.Id;
}
}
function ToArray(iterator) {
return [...iterator];
}
function* Range(start, end) {
for(let i = start; i<end; i++) {
yield i;
}
}
function* Select(iterator, projector) {
for(let x of iterator) {
yield projector(x);
}
}
function CreateGuid() {
return NewGuid().toString().replace(re, "");
}
function NewGuid() {
function s4() {
return Math.floor((1 + Math.random()) * 0x10000)
.toString(16)
.substring(1);
}
return s4() + s4() + '-' + s4() + '-' + s4() + '-' +
s4() + '-' + s4() + s4() + s4();
}
function delay(time) {
return new Promise((resolve)=>{
setTimeout(resolve, time);
});
}
for(let i = 0, promise = Promise.resolve(); i<100;i++) {
promise = promise.then(()=>Main(N)).then(()=>delay(1000));
}