Правильное время выполнения программы CUDA

TL; DR

Он обрабатывается как восьмеричный (база 8) из-за ведущего 0, как и ведущий 0x, сделает его шестнадцатеричным (основание 16). У этого есть длинная и замученная история, и уже не так, как восьмеричные числа написаны в современном JavaScript. В современном JavaScript, использующем строгий режим, восьмеричный восьмизначный формат является синтаксической ошибкой; восьмеричные числа записываются с префиксом 0o.

История

В начале (на исходном языке из Netscape и первой и второй спецификаций ECMAScript) ведущая 0 на числовой литерал официально означал восьмеричный (база 8), так же, как ведущий 0x означает шестнадцатеричный (основание 16):

OctalIntegerLiteral ::
    0 OctalDigit
    OctalIntegerLiteral OctalDigit

Например, 10, 012 и 0xA - все способы записи десятичного числа десять. Это согласуется с некоторыми другими языками с синтаксисом, подобным JavaScript (C, C ++, Java, ...), но это очень запутанно.

Как и в ECMAScript & nbsp; 3, эта форма восьмеричного литерала была понижена к необязательному расширению, а десятичные целочисленные литералы были изменены так, что они не могут иметь начальные нули (если только реализация не включает расширение):

DecimalIntegerLiteral ::
    0
    NonZeroDigit DecimalDigits(opt)

Но ECMAScript & nbsp; 5 запретил делать это в строгом режиме:

Соответствующая реализация при обработке кода строгого режима (см. 10.1.1) не должна расширять синтаксис NumericLiteral включить OctalIntegerLiteral , как описано в B.1.1 .

blockquote>

ECMAScript & nbsp; 6 (ECMAScript 2015) вводит BinaryIntegerLiteral и OctalIntegerLiteral , поэтому теперь мы имеем более когерентные литералы:

  • BinaryIntegerLiteral , с префиксом 0b или 0B.
  • OctalIntegerLiteral , с префиксом wi th 0o или 0O.
  • HexIntegerLiteral с префиксом 0x или 0X.

Старый Расширение OctalIntegerLiteral было переименовано в LegacyOctalIntegerLiteral , которое по-прежнему разрешено в нестрогом режиме.

Заключение

Поэтому, если вы хотите для синтаксического анализа числа в base & nbsp; 8 используйте префиксы 0o или 0O (не поддерживаемые старыми браузерами) или используйте parseInt.

И если вы хотите быть уверены, что ваши номера будут

Примеры

  • 010 В строгом режиме (требуется ECMAScript 5), это синтаксическая ошибка , В нестрогом режиме это может быть синтаксическая ошибка или возврат 8 (зависит от реализации).
  • 0o10, 0O10 Перед ECMAScript 6 они являются синтаксическими ошибками. В ECMAScript 6 они возвращаются 8.
  • parseInt('010', 8) Он возвращает 8.
  • parseInt('010', 10) Он возвращает 10.

Если вам интересно, вы можете найти текущую текущую спецификацию здесь и исторические версии здесь .

0
задан Maxim Fedorov 23 January 2019 в 08:17
поделиться

1 ответ

В разное время вы можете измерить время, когда имеете дело с куда.

Вот некоторые решения, которые вы можете попробовать:

  1. Измерьте общее время, используемое cuda: используйте time (), чтобы получить абсолютное значение времени, прежде чем снова использовать какие-либо функции cuda и time () после того, как вы получили результат. Разница будет в реальном времени.
  2. Измеряйте только время вычислений: у cuda есть некоторые накладные расходы при запуске, но если вам это не интересно, поскольку вы будете использовать свой код много раз, не выходя из среды cuda, вы можете измерить его отдельно. Пожалуйста, прочитайте Руководство по программированию CUDA C , в нем будет объяснено использование Событий, которые будут использоваться для синхронизации.
  3. Используйте профилировщик, чтобы получить подробную информацию о том, какая часть программы занимает какое время: время ядра особенно интересно, поскольку оно говорит вам, сколько времени занимают ваши вычисления. Будьте осторожны, когда смотрите на времена API. В вашем примере, cudaEventCreate () тратит много времени, так как это первая функция cuda в вашей программе, поэтому она включает накладные расходы при запуске. Кроме того, cuda [...] Synchronize () на самом деле не требует столько времени для вызова, но включает время ожидания синхронизации.
0
ответ дан Daniel Bauer 23 January 2019 в 08:17
поделиться
Другие вопросы по тегам:

Похожие вопросы: