All streams
Search
Write a publication
Pull to refresh
214
0
gribozavr @gribozavr

Пользователь

Send message
Там использовался GCC, а это совершенно другая история.
В clang есть векторизация базовых блоков, что вместе с loop unrolling даёт нужный эффект. А вот есть ли она в Apple clang — это другой вопрос.
> Даже на интринсиках будет медленнее.

Пробовали? Баг зафайлили?
Не пробовали автоматическую векторизацию в clang? (Или её ещё нет в Apple clang?..)
> Ну вообще нет, потому что «ввели» не значит «покрыли все целиком».

Если в этом смысле — тогда согласен.
И этим мы зафиксировали текущее поведение системы. Правильное, неправильное — всё вместе.
Зачем писать статью если есть замечательная книга — Working effectively with legacy code. Хочу обратить ваше внимание на определение понятия legacy code, которое там даётся.
> модульное тестирование как новую блаж начальства

Разве тесты в этом виноваты? Или, я начинаю догадываться, цель статьи — выяснить какие тесты более полезны при условии что тесты делаются для галочки?

Если функция сложнее и из названия не очевидно что она делает — значит должен быть документационный комментарий. Иначе как ей пользоваться?

В общем, ещё раз: с в принципе неправильным подходом к разработке не стоит винить юнит- (или какие-либо ещё) тесты в чём-либо.
Короткого комментария со словом «unsigned» было бы достаточно. А ещё лучше вынести это слово в название функции.
Мне кажется что ваша проблема в том, что вы тестируете без спецификации, что вообще говоря, делать бессмысленно.

Если программист может вот так вот взять и поменять checkInt() на проверку чисел со знаком когда до этого она проверяла только беззнаковые и его это ни капельки не смутило и не нужно было менять спецификацию (да, пусть это будет одно предложение в документационном комментарии перед функцией) — то нужно исправлять программистов, а не занижать значимость юнит-тестов.
> Этот способ не эффективен, поскольку придется устанавливать много соединений
На количество соединений количество сообщений не влияет.

> Если расположить зоны исполнителей горизонтально, то можно использовать MPI_Type_contiguous или в MPI_Send указывать необходимое число элементов, но это, на мой взгляд, красивее.
Главное — это будет быстрее. Процессоры обожают бегать по памяти последовательно.

Статье поставил плюс, но честно — если бы я такое уже не писал, ничего бы не понял из этой статьи.
Как обычно тот факт что регистров в 2 раза больше все обходят стороной.
$ cat /tmp/zzz.cc 
int main(int argc, char *argv[]) {
  int i;
  int &x = *(int *) (argc == 2 ? &i : 0);
}
$ clang /tmp/zzz.cc
$ ./a.out 
$ clang -fcatch-undefined-behavior /tmp/zzz.cc
$ ./a.out 
Illegal instruction
> container(*(C*)NULL)
UB.
> можно ли сотворить подобное, не прибегая к помощи лямбд и C++11?

Просто замените лямбды на function objects с виртуальными методами.
Вот в только таких хорошо отлаженных случаях кросс-компиляция работает хорошо — когда этот юзкейс предусмотрен и оттестирован разработчиками тулчейна и IDE.
И кросс-компиляция, и копирование.
Working Draft N3376, [dcl.ref] p5:
[...]
A reference shall be initialized to refer to a valid object or function. [ Note: in particular, a null reference cannot exist in a well-defined program, because the only way to create such a reference would be to bind it to the “object” obtained by dereferencing a null pointer, which causes undefined behavior.
[...]
1. Кросс-компиляция, копирование на девайс, запуск.

2. Копирование на девайс, компиляция, запуск.

3. Кросс-компиляция, запуск под эмулятором.

4. Компиляция, запуск. (Всё на девайсе.)

Выбирайте какой вариант проще. Я считаю что если уже возиться с кросс-компиляцией, то лучше вариант (3). А если запускать на девайсе, (а мы говорим о ресурсоёмких задачах), то можно и компилировать там же — вариант (2). Вариант (1) сочетает недостатки всех подходов.

Information

Rating
Does not participate
Location
Украина
Registered
Activity