Мне (в основном) нравится новая инициатива основных рекомендаций C++ и то, что предлагает библиотека поддержки рекомендаций. В частности, я хочу больше использовать span
s. Однако я столкнулся с проблемой, что __restrict__
не является частью С++, хотя я хочу/должен его использовать.
Чтобы быть более конкретным: без span
я бы заявил:
void foo(int* __restrict__ p, size_t len);
Но если я сейчас объявлю:
void foo(gsl::span<int> s);
Я не получаю эффект __restrict__
, если мой компилятор не супер-умный. Я мог бы усердно молиться богам gcc/clang/msvc и сказать:
void foo(gsl::span<int> __restrict__ s);
или, в качестве альтернативы, я мог бы настроить реализацию GSL span<T>
так, чтобы указатели T* begin
и T* end
сами были __restrict__
отредактированы. Однако это совсем не уверен, что это будет соблюдено.
Итак, могу ли я как-то заставить __restrict__
'ion? Или я должен просто отказаться от него? Это лишает удовольствия переключаться на span
's...
__restrict__
наgsl::span
, вы, вероятно, не хотите использоватьgsl::span
в первую очередь, но сначала я бы убедился, что переключение на span действительно замедляет вашу программу. - person MikeMB   schedule 21.02.2017int* __restrict__ p = s.data();
? - person einpoklum   schedule 21.02.2017__restrict__
, накладные расходы, введенныеgsl::span
, вероятно, будут запрещены. Если вас интересует конкретный фрагмент кода, где__restrict__
позволяет компилятору генерировать значительно более эффективный код, то очень вероятно, что добавленная косвенность нарушит эти оптимизации компилятора. - person MikeMB   schedule 21.02.2017