Pull to refresh
292
0.5
Дмитрий Кашицын @Halt

Программист, линуксоид, паяльник-железячник

Send message
Дополнительные условия внутри цикла или же вычисления, влияющие на счетчик цикла, приведут к невозможности развернуть цикл.

Разворачиванием циклов компилятор занимается самостоятельно. Ему следует помочь только тем, чтобы это можно было сделать. Также небольшие циклы желательно объединять в один. Но при наличии условий или большого тела цикла, наоборот, бывает лучше разбить на несколько циклов, чтобы хотя бы один из них был развернут компилятором.

Я просто оставлю это здесь: http://llvm.org/docs/Vectorizers.html

The Loop Vectorizer is able to “flatten” the IF statement in the code and generate a single stream of instructions. The Loop Vectorizer supports any control flow in the innermost loop. The innermost loop may contain complex nesting of IFs, ELSEs and even GOTOs.

int foo(int *A, int *B, int n) {
  unsigned sum = 0;
  for (int i = 0; i < n; ++i)
    if (A[i] > B[i])
      sum += A[i] + 5;
  return sum;
}

В статье очень много сомнительных мест, которые просто напросто дезинформируют читателя.
Люди всю свою историю занимаются тем, что деградируют и потребляют. Только среди них есть 5%, которые занимались делом в любое время и в любых условиях. Эти люди и будут двигать цивилизацию вперед. И у них будет гораздо больше возможностей этим заниматься, чем когда-либо.

У меня такая же история на ноуте Asus X50N, которому уже лет 8, только проблема не с выключением, а с перезагрузкой.

Какое-то замшелое ядро тогдашних времен успешно его перегружало. А все что новее — просто вешает систему в горячем цикле. Такое ощущение, что ACPI команда проходит, но без эффекта.
Шашки если что уже давно были посчитаны полностью. То есть, на любой ваш ход, противнику достаточно заглянуть в базу данных и найти там оптимальный ответ.
Чтобы обучаться на текущих ходах, надо знать их реальный исход. Если партия была выиграна, то сети накидывается поощрение, ход за ходом.

Подозреваю, что в течение партии этого не делают, ибо на руках у машины будет только оценка вероятности успешного исхода партии из заданной позиции, ну и прикидки монте-карло, которые тоже могут быть необъективными (как показала нам 4 партия).
Справедливости ради стоит отметить, что этого не происходит. Разработчики уже заявляли, что между партиями программу не модифицируют и в процессе никаких рычагов воздействия не имеют. Видимо посчитали, что так будет интереснее.
Я бы еще добавил, что этот матч — фактически первая игра программы с серьезным соперником (и уже такой результат!). Можно только догадываться, что будет в будущем.
Адаптация под людей — это только первый этап обучения системы. Как говорят сами разработчики, основную работу она провела, играя сама с собой.

Насколько я понял, в будущем планируется организовать обучение вообще без человеческих партий. Тогда воможно мы увидем что-то новое. Хотя и в прошедших партиях, программа демонстрировала творческое мышление и делала оригинальные ходы.
Седоль выиграл благодаря блестящей комбинации в центре доски, когда смог вторгнуться и удержать группу внутри мойо противника. До этого момента можно было сказать, что Ли капитально проигрывал. Ну а потом программа начала гнать откровенную лажу.
Для простейших задач не требуется совершенно ничего особенного. По сути, просто запись нот с длительностями. Это в разы проще, чем накликивать все это мышой. Не говоря уже о рефакторинге.

Настоятельно рекомендую.
Здорово написано, спасибо.

Но я бы все-таки добавил, что используемый лексикон это такой же инструмент, и пользоваться им надо уметь. Если с той стороны находится такой же специалист, то одно предложение с терминами может заменить два часа махания руками у флипчарта. Наработанные решения всегда можно потом перевести на человеческий для интересующихся.
У вас перевод вопроса кривой. Не концепций шаблонов, а концептов. Template concepts.
Хорошо, что все больше статей по LLVM появляется на русском языке, спасибо.

В качестве дополнительных материалов могу предложить послушать мой доклад на прошедшей конференции C++ Siberia.

А еще, буквально в эту пятницу я буду читать доклад на конференции в Санкт-Петербурге об LLVM и проблемах алиасинга. Будет рассказано о технике Alias Analysis, преимуществах, недостатках и о том, как оно применяется в современных компиляторах.
А потом догадаться и активную часть наушников встроить в затычки и тогда… oh shi.
Спорное утверждение. Крупный бизнес как никто другой знает, что активы надо диверсифицировать.
В кои8-то веки зашел на ЛОР. Прочитал пару комментариев… все то же, все те же. Хоть что-то в мире остается неизменным.

Сказать фразу «конструктивного в них не очень много» по отношению к этому может только очень тактичный человек :)
Не вопрос, тут скорее речь о том что технология в любом случае будет востребована, а не детали конкретной реализации.
В системах виртуальной реальности такое разрешение востребовано, так же как и технология его передачи.

В телевизоре же я и сам не пойму, нафига. Мне и 4К кажутся излишеством.
Ответ со Stackoverflow:

Yes, this is copy elision through Named Return Value Optimization.

The C++ standard allows an implementation to omit a copy operation resulting from a return statement, even if the copy constructor has side effects.

Reference:

C++03 Standard:
12.8 Copying class objects:

# 15

When certain criteria are met, an implementation is allowed to omit the copy construction of a class object, even if the copy constructor and/or destructor for the object have side effects. In such cases, the implementation treats the source and target of the omitted copy operation as simply two different ways of referring to the same object, and the destruction of that object occurs at the later of the times when the two objects would have been destroyed without the optimization.111) This elision of copy operations is permitted in the following circumstances (which may be combined to eliminate multiple copies):

— in a return statement in a function with a class return type, when the expression is the name of a non-volatile automatic object with the same cv-unqualified type as the function return type, the copy operation can be omitted by constructing the automatic object directly into the function’s return value

— when a temporary class object that has not been bound to a reference (12.2) would be copied to a class object with the same cv-unqualified type, the copy operation can be omitted by constructing the temporary object directly into the target of the omitted copy

Information

Rating
1,554-th
Location
Алматы (Алма-Ата), Алма-Атинская обл., Казахстан
Date of birth
Registered
Activity