Разработка динамических сайтов
SEO услуги
Управление контекстной рекламой

Вход на хостинг

Имя пользователя:*

Пароль пользователя:*

IT-новости

20.04.2016 iPhone 2017 года поместят в водонепроницаемый корпус из стекла

Линейка iPhone в новом году серьезно поменяется. В этом уверен аналитический исследователь Мин Чи Ку......

подробнее

30.07.2015 Ищем уникальный контент для сайта

Ищем уникальный контент для сайта Без уникального контента Ваш сайт обречен на то, что его страницы......

подробнее

11.05.2015 Распространённые ошибки разработчиков сайтов

Не секрет, что в сети Интернет насчитывается миллионы сайтов, и каждый день появляются тысячси новых......

подробнее

Современные технологии Just-In-Time и HotSpot дают некоторую уверенность, что вычислительный Java-код, интенсивно работающий с числами и массивами чисел, скорее всего не будет отставать по скорости от языка C в 10-100 раз – как это было на заре развития Java. Но отставание в полтора-два и даже в несколько раз вполне возможно. Опережение же – весьма маловероятно.

Приведем пример. Даны 2 массива a и b коротких целых чисел (short) длины 20000. Требуется для каждой пары соответствующих элементов вычислить минимум и поместить его в массив a: a[k]= a[k]<b[k]? a[k]: b[k].

Решаем задачу на чистой Java и с применением native-кода на языке C. В обоих случаях цикл «расцикливаем», чтобы по возможности исключить потери на инкремент индекса. Для Java «расцикленное» оптимальное решение выглядит примерно так:

for (; aofs<aofsmax; aofs+=4,bofs+=4) {

    if (a[aofs]>b[bofs]) a[aofs]=b[bofs];

    if (a[aofs+1]>b[bofs+1]) a[aofs+1]=b[bofs+1];

    if (a[aofs+2]>b[bofs+2]) a[aofs+2]=b[bofs+2];

    if (a[aofs+3]>b[bofs+3]) a[aofs+3]=b[bofs+3];

  }

Измерения быстродействия на компьютере Pentium-III 800 МГц с кэшем процессора 256 Кб показывают: если оба массива попадают в кэш процессора, то цикл на Java расходует 11.5 наносекунд на элемент, а на C++ – всего 6 наносекунд. (Использовался комплект Sun Java SDK 1.4.1 и компилятор Microsoft C++ из пакета Visual Studio 6.0, операционная система Windows 2000.) Если применить встроенный ассемблер C++ и специальные команды MMX/SSE, то время можно сократить до 1.4 наносекунды на элемент – в 8 раз быстрее чем наилучшее время в Java.

Если массивы существенно длиннее и не помещаются в кэш процессора, то разница между Java, C и ассемблером будет меньше: 25нс на Java, 19нс на С и 12нс на ассемблере с использованием команд MMX/SSE. (Все эти цифры, разумеется, чисто ориентировочные – на разных компьютерах возможны заметные отличия.)

Вопрос:

Как измерить промежуток времени, затраченный, например, на выполнение некоторого участка программы?

Ответ:


Предыдущая страницаОглавлениеСледующая страница
 
[001] [002] [003] [004] [005] [006] [007] [008] [009] [010] [011] [012] [013] [014] [015] [016] [017] [018] [019] [020]
[021] [022] [023] [024] [025] [026] [027] [028] [029] [030] [031] [032] [033] [034] [035] [036] [037] [038] [039] [040]
[041] [042] [043] [044] [045] [046] [047] [048] [049] [050] [051] [052] [053] [054] [055] [056] [057] [058] [059] [060]
[061] [062] [063] [064] [065] [066] [067] [068] [069] [070] [071] [072] [073] [074] [075] [076] [077] [078] [079] [080]
[081] [082] [083] [084] [085] [086] [087] [088] [089] [090] [091] [092] [093] [094] [095] [096] [097] [098] [099] [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]

+7 (831) 413-63-27
ООО Дельта-Технология ©2007 - 2023 год
Нижний Новгород, ул. Дальняя, 17А.
Rambler's Top100