26.03.2018, 16:26
|
Интересующийся
|
|
Регистрация: 01.07.2017
Сообщений: 10
|
|
Время выполнения скрипта
var time = performance.now();
for(var i = 1000000000; i; i--) Math.random();
time = performance.now() - time;
console.log('Время выполнения = ', time);
Хромоподобные браузеры пыхтят 6900мс
а FF показывает какие то фантастические 920мс
это что за прикол?
|
|
26.03.2018, 17:52
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,123
|
|
|
|
26.03.2018, 20:05
|
Интересующийся
|
|
Регистрация: 01.07.2017
Сообщений: 10
|
|
Что-то в хроме быстрей, что-то в ФФ, и порой очень сильно.
|
|
27.03.2018, 22:30
|
|
Профессор
|
|
Регистрация: 01.12.2016
Сообщений: 3,650
|
|
Сообщение от LinaInverse
|
920мс
|
Is good
|
|
29.04.2018, 14:37
|
|
Профессор
|
|
Регистрация: 01.12.2016
Сообщений: 3,650
|
|
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body>
<select>
<option>1 поток</option>
<option>2 потока</option>
<option>3 потока</option>
<option>4 потока</option>
<option>5 потоков</option>
<option>6 потоков</option>
<option>7 потоков</option>
<option>8 потоков</option>
<option>9 потоков</option>
<option>10 потоков</option>
<option>11 потоков</option>
<option>12 потоков</option>
<option>13 потоков</option>
<option>14 потоков</option>
<option>15 потоков</option>
<option>16 потоков</option>
<option>17 потоков</option>
<option>18 потоков</option>
<option>19 потоков</option>
<option>20 потоков</option>
</select>
<button>Старт</button>
<script>
var sel = document.querySelector('select');
document.querySelector('button').onclick = ()=> {
var potok = sel.selectedIndex+1, flag = 0,
time = performance.now(),
work = [], end = [];
for (var i = 0; i < potok; i++){
work[i] = new Worker(URL.createObjectURL(new Blob([workerRunner.toString().replace(/^function .+\{?|\}$/g, '')],{ type:'text/javascript' })));
end[i] = 0;
}
work.forEach((el,i)=>{
el.postMessage([potok, i]);
el.onmessage=e=>{
end[i] = e.data;
if(!end.includes(0)) {
el.terminate();
time = performance.now() - time;
console.log('Время выполнения = ', time);
}
};
});
};
function workerRunner() {
self.onmessage = e => {
w = 1000000000,
a1 = Math.floor(w/e.data[0]*e.data[1]),
a2 = Math.floor(w/e.data[0]*(e.data[1]+1));
for(var i = a1; i<a2; i++) Math.random();
self.postMessage(1);
};
}
</script>
</body>
</html>
результат радует 90-120 мс выполняется в FF (у меня)
потоки лучше всего устанавливать в соответствии с количеством физических ядер
Если установить максимальное количество потоков CPU грузится на 100%
Последний раз редактировалось j0hnik, 30.04.2018 в 00:07.
|
|
29.04.2018, 16:10
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,989
|
|
Сообщение от j0hnik
|
потоки лучше всего устанавливать в соответствии с количеством физических ядер
|
А почему поток, это именно новое ядро?
|
|
29.04.2018, 18:08
|
|
Профессор
|
|
Регистрация: 01.12.2016
Сообщений: 3,650
|
|
laimas,
В данном случае экспериментально так быстрей работает.
|
|
29.04.2018, 18:26
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,989
|
|
Сообщение от j0hnik
|
В данном случае экспериментально так быстрей работает.
|
Потоки, если говорить применительно к процессорам, это аппаратная поддержка потоков, в процессорах Intel это технология Hyper-Threading (поддержка потоков одна из характеристик процессора, есть ли, это можно узнать из его паспорта), и не имеет отношения к количеству ядер (в системе Hyper-Threading может отображаться как наличие N ядер, но это не так). Такую поддержку может иметь и одно-ядерный процессор.
Та же Windows не может эффективно использовать множество ядер, не говоря уже о приложениях. У меня в системе установлено всего одно приложение, которое эффективно загружает все 8 ядер системы, это Adobe Premiere. Но еще более прирост производительности получается когда это ПО задействует десятки ядер GPU, правда если видеокарта входит в список поддерживаемых.
С недавних пор и браузеры стали использовать ядра GPU, если возможно, но чтобы они эффективно управляли ядрами CPU, что-то не слышал.
|
|
29.04.2018, 18:57
|
|
Профессор
|
|
Регистрация: 01.12.2016
Сообщений: 3,650
|
|
Сообщение от laimas
|
ПО задействует десятки ядер GPU
|
Уже года три как карты с тысячами ядер на рынке.
Сообщение от laimas
|
Та же Windows не может эффективно использовать множество ядер
|
с кодирование сравнивать не нужно, там де данные сильно зависят друг от друга, многопоточность использовать очень не просто. Мы с вами по крайней мере лучше не напишем.
Ну, а за лекцию спасибо =)
|
|
29.04.2018, 19:53
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,989
|
|
j0hnik,
вы путаете многопоточность как эмуляцию распараллеливания задачи со множеством ядер, которые могут это делать.
А насчет тысячи ядер, так на рынке и супер компьютеры есть, но вряд ли вы как перчатки можете поменять свою бюджетную видеокарту даже на более со скромным числом ядер, но производительную с нехилой ценой. Живите реалиями, зачем фантазировать.
А графические ядра использовать легче уже потому, что существуют готовые программно-аппаратные комплексы. Ищите в сети - CUDA.
Последний раз редактировалось laimas, 29.04.2018 в 19:55.
|
|
|
|