Перейти к содержанию
    

Вот вчера посмотрел R2009b под win7x64 и порадовался - текущий MATLAB шустр и приятен. Хотя пару лет назад я был о нем такого же мнения.

 

ИМХО это субъективное ощущение сильно зависит от железа, на котором MATLAB пускается - i7 c 4 гигами ему вполне приятен.

 

Шустр и оно не удивительно! Ведь такие продукты как MATLAB пишуться ориентируясь на архитектуру (я имею ввиду разрядность) процессора. На 64 разрядном коде, во-первых, доступно больше оперативной памяти (а она никогда лишней не бывала). Если на 32 разрядной Винде доступно не более 3 ГБ оперативы, то 64 разрядные допускают уже до 192 ГБ. Во-вторых, математические операции будут выполняться быстрее в MATLAB'е на 64 разрядной версии ОС, т.к. числа, с которыми он работает, уже без проблем могут быть занесены в регистр процессора без разбивки (все-таки регистр в 2 раза больше). Да и доступно теперь в процессорах, поддерживающих архитектуру x64, больше регистров общего назначения + дополнительные регистры. ;)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Во-вторых, математические операции будут выполняться быстрее в MATLAB'е на 64 разрядной версии ОС, т.к. числа, с которыми он работает, уже без проблем могут быть занесены в регистр процессора без разбивки (все-таки регистр в 2 раза больше). Да и доступно теперь в процессорах, поддерживающих архитектуру x64, больше регистров общего назначения + дополнительные регистры.

Второе сомнительно. Обе архитектуры (x32 и x64) считают на флоат-поинтах одинаково, т.к. у них FPP (float point processor) одинаков. А новый MatLab практически всю арифметику проворовачивает не в целых числах, а во флоатах, а там специализированные регистры (одной и той же длины в обеих архитектурах). В регистрах общего назначения флоат-числа сроду не хранились, не умеют те регистры с ними оперировать.

А нынче MatLab переписали под SSE (SSE-2,3,4...) с которым компилятор легко обходится, когда как до того, использовался FPP стековой архитектуры (x87), из-за чего компилятор каждый раз передавливал промежуточные результаты в память. Вручную его запрограммировать так, чтобы промежуточные результаты в стеке держал, было можно, но для компилятора крайне сложно, т.к. в процессе вычислений глубина погружения постоянно меняется. На SSE-регистрах все делается примитивно просто, т.к. они по обращению разные. Из-за этого на SSE можно скомпилировать вычисление какой-нибудь сложной формулы быстрее, т.к. промежуточные результаты можно оставлять во флоат-регистрах, где они и были получены. А по мере необходимости проводить с ними арифметические операции напрямую (x87 может оперировать только верхушкой стека). Из-за этого экономится много операций по загрузке и чтению в память. А такие операции накладны, т.к. размерность числа там 64 бита. ... Я сама долгое время возилась с ускорением матричных операций, а потому знаю, наколько сильно скорость вычислений зависит от многих иных обстоятельств, от типа архитектуры мало зависимых. Например, достаточно выравнить расположение масива флоат-данных на адрес, кратный 16-ти байт, чтобы скорость расчетов возрасла в полтора раза только за счет особенностий организации памяти.

Если x64 и может иметь здесь какое-либо преимущество над x32, то разве что в возможности записывать флоат-число в память и читать его оттуда за один такт (или за меньшее число тактов, чем в x32). Но это уже скорее относится к ширине шины, которая соединяет CPU и памятью (кэшем?). В этом вопросе я не сильна и ничего определенного сказать не могу.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Обе архитектуры (x32 и x64) считают на флоат-поинтах одинаково, т.к. у них FPP (float point processor) одинаков.

Физически - да, регистры одни и те же. И в AMD64 архитектуре регистры с плавающей точкой - 80 битные. Но могут ли операциионные системы х86 (т.е. 32 разрядные) полностья их использовать - это вопрос.

А нынче MatLab переписали под SSE (SSE-2,3,4...) с которым компилятор легко обходится...

А эти регистры в AMD64 архитектуре - 128 разрядные. Они тоже были таковыми в х86?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А эти регистры в AMD64 архитектуре - 128 разрядные. Они тоже были таковыми в х86?

Да, тоже. Другое дело, что в AMD64 их в два раза больше (16).

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

... На 64 разрядном коде, во-первых, доступно больше оперативной памяти (а она никогда лишней не бывала). Если на 32 разрядной Винде доступно не более 3 ГБ оперативы, то 64 разрядные допускают уже до 192 ГБ....

что-то я не понял насчёт 192 ГБ, 64 разрядная шина позволяет обратиться только к 16 ГБ ОЗУ. 32 разрядной шине доступно 4 ГБ, просто ОС занимет около 1 ГБ.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

что-то я не понял насчёт 192 ГБ, 64 разрядная шина позволяет обратиться только к 16 ГБ ОЗУ.

Чо-то я тоже не понял вашей арифметики. Четырёхпудовая (4x16 = 64) разрядность регистров общего назначения позволяет таки адресовать 2^64 = 16 ГигаГигаБайт = 16 ЭкзаБайт. Правда реальная физическая шина адреса всё равно несколько уже, но всё равно адресует терабайты.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

что-то я не понял насчёт 192 ГБ, 64 разрядная шина позволяет обратиться только к 16 ГБ ОЗУ.
очевидно, что вы имеете в виду не возможности 64 разрядной шины как таковой, а возможности вполне определенной материнки.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...