Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 26.03.2018, 16:26
Интересующийся
Отправить личное сообщение для LinaInverse Посмотреть профиль Найти все сообщения от LinaInverse
 
Регистрация: 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мс

это что за прикол?
Ответить с цитированием
  #2 (permalink)  
Старый 26.03.2018, 17:52
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,123

LinaInverse,
Firefox 58 получил очередной прирост производительности
Ответить с цитированием
  #3 (permalink)  
Старый 26.03.2018, 20:05
Интересующийся
Отправить личное сообщение для LinaInverse Посмотреть профиль Найти все сообщения от LinaInverse
 
Регистрация: 01.07.2017
Сообщений: 10

Что-то в хроме быстрей, что-то в ФФ, и порой очень сильно.
Ответить с цитированием
  #4 (permalink)  
Старый 27.03.2018, 22:30
Аватар для j0hnik
Профессор
Отправить личное сообщение для j0hnik Посмотреть профиль Найти все сообщения от j0hnik
 
Регистрация: 01.12.2016
Сообщений: 3,650

Сообщение от LinaInverse Посмотреть сообщение
920мс
Is good
Ответить с цитированием
  #5 (permalink)  
Старый 29.04.2018, 14:37
Аватар для j0hnik
Профессор
Отправить личное сообщение для j0hnik Посмотреть профиль Найти все сообщения от j0hnik
 
Регистрация: 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.
Ответить с цитированием
  #6 (permalink)  
Старый 29.04.2018, 16:10
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

Сообщение от j0hnik
потоки лучше всего устанавливать в соответствии с количеством физических ядер
А почему поток, это именно новое ядро?
Ответить с цитированием
  #7 (permalink)  
Старый 29.04.2018, 18:08
Аватар для j0hnik
Профессор
Отправить личное сообщение для j0hnik Посмотреть профиль Найти все сообщения от j0hnik
 
Регистрация: 01.12.2016
Сообщений: 3,650

laimas,
В данном случае экспериментально так быстрей работает.
Ответить с цитированием
  #8 (permalink)  
Старый 29.04.2018, 18:26
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

Сообщение от j0hnik
В данном случае экспериментально так быстрей работает.
Потоки, если говорить применительно к процессорам, это аппаратная поддержка потоков, в процессорах Intel это технология Hyper-Threading (поддержка потоков одна из характеристик процессора, есть ли, это можно узнать из его паспорта), и не имеет отношения к количеству ядер (в системе Hyper-Threading может отображаться как наличие N ядер, но это не так). Такую поддержку может иметь и одно-ядерный процессор.

Та же Windows не может эффективно использовать множество ядер, не говоря уже о приложениях. У меня в системе установлено всего одно приложение, которое эффективно загружает все 8 ядер системы, это Adobe Premiere. Но еще более прирост производительности получается когда это ПО задействует десятки ядер GPU, правда если видеокарта входит в список поддерживаемых.

С недавних пор и браузеры стали использовать ядра GPU, если возможно, но чтобы они эффективно управляли ядрами CPU, что-то не слышал.
Ответить с цитированием
  #9 (permalink)  
Старый 29.04.2018, 18:57
Аватар для j0hnik
Профессор
Отправить личное сообщение для j0hnik Посмотреть профиль Найти все сообщения от j0hnik
 
Регистрация: 01.12.2016
Сообщений: 3,650

Сообщение от laimas
ПО задействует десятки ядер GPU
Уже года три как карты с тысячами ядер на рынке.
Сообщение от laimas
Та же Windows не может эффективно использовать множество ядер
с кодирование сравнивать не нужно, там де данные сильно зависят друг от друга, многопоточность использовать очень не просто. Мы с вами по крайней мере лучше не напишем.

Ну, а за лекцию спасибо =)
Ответить с цитированием
  #10 (permalink)  
Старый 29.04.2018, 19:53
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

j0hnik,
вы путаете многопоточность как эмуляцию распараллеливания задачи со множеством ядер, которые могут это делать.

А насчет тысячи ядер, так на рынке и супер компьютеры есть, но вряд ли вы как перчатки можете поменять свою бюджетную видеокарту даже на более со скромным числом ядер, но производительную с нехилой ценой. Живите реалиями, зачем фантазировать.

А графические ядра использовать легче уже потому, что существуют готовые программно-аппаратные комплексы. Ищите в сети - CUDA.

Последний раз редактировалось laimas, 29.04.2018 в 19:55.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Position fixed, но динамический по оси ОХ tvixa Элементы интерфейса 4 09.09.2013 15:39
как в datepicker задать диапазон дат во время выполнения скрипта. Yurik jQuery 0 23.02.2011 12:19
Google Chrome перерисовка страницы во время выполнения скрипта Dekart Javascript под браузер 0 08.06.2010 08:35
Нужно добавить блокировку ссылки на время выполнения скрипта aidka Events/DOM/Window 1 02.08.2009 20:11
разное время выполнения операции ropowek Events/DOM/Window 2 08.10.2008 13:27