Мой код Rcpp задерживает отображение печатного сообщения [duplicate]

с водяным знаком с  «только для целей развития» возвращается, когда выполняется одно из следующих условий:

1. В запросе отсутствует ключ API. 2.Биллинг не включен в вашем аккаунте. 3. Предоставленный метод выставления счетов недействителен (например, истекшая кредитная карта). 4. Превышен лимит на каждый день.

0
задан Tim 7 June 2016 в 10:32
поделиться

1 ответ

Я не уверен, понимаете ли вы из своего теста, что Rcpp:

  1. 11.102 / 5.156 = 2.15322 раза быстрее при метании предупреждения
  2. 0.052 / 0.001 = 52 раза быстрее в случае с чистым контуром.

Теперь, когда вы бросаете предупреждение, в обоих Rcpp и base R происходит следующее:

  1. Поток в STDERR открыт. (Следовательно, красный текст вместо черного STDOUT)
  2. Запись сообщения
  3. Закрыть STDERR
  4. Продолжить инструкции.

В Rcpp низкоуровневая ссылка помогает снизить общее время, необходимое для повторения вышеописанной процедуры, и вернуть управление в цикл против обработчика R, который находится выше в стеке.

Опять же, время, необходимое для завершения работы с Rcpp, является нормальным, так как оно должно уступить управление процессом обратно R, распечатать сообщение, а затем вернуться в цикл. Лучший способ подумать о потере скорости из случая с чистым контуром - вы решили называть функцию на основе R в цикле C ++ вместо цикла R, ожидающего ускорения.

Честно говоря, немного удивил, что Rcpp смог быть в 2 раза быстрее, чем эквивалент R.

3
ответ дан coatless 26 August 2018 в 04:54
поделиться
Другие вопросы по тегам:

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