Здесь говорится, что создатель контракта должен получить 10 тыс. биткоинов. Этот контракт позволяет любому, у кого достаточно средств на счете, перевести биткоины другим людям.
К чему относится этот текст?
Подсказка: к коду над этим текстом он не подходит.
За ссылку спасибо, но по-прежнему не вижу связи между кодом и абзацем под ним. По вашей ссылке, кстати, ничего про «создатель контракта должен получить 10 тыс. биткоинов» не вижу. Откуда это взялось?
В статье несколько мест вида «сейчас мы расскажем, как работают умные контракты», а рассказывается не как они работают, а как это выглядит для пользователя. Это как написать «сейчас мы вам расскажем как работет телевизор» и далее говорить «пользователь берет пульт, нажимает кнопки, телевизор показывает изображение».
Образец умного контракта, написанного на платформе Ethereum
Здесь говорится, что создатель контракта должен получить 10 тыс. биткоинов. Этот контракт позволяет любому, у кого достаточно средств на счете, перевести биткоины другим людям.
Эээ, wat? Где это говорится? Не вижу вообще связи между примером и «создатель контракта должен получить 10 тыс. биткоинов».
Нет, сама по себе неподвижно зависшая ракета с точки зрения механики работы не совершает. Хотя в таком виде её рассматривать некорректно — правильней рассматривать систему из ракеты и испускаемых из нее газов. В этом случае центр масс системы будет непрерывно опускаться вниз.
Раз производительность упала в 1.6 раз, а не в 3, значит вы именно упираетесь по памяти и вам стоит изучить варианты реструктурирования ваших циклов. В идеале — добиться векторизации всего, что только можно.
… а возможно даже и 3, чтобы одновременно участвовало меньше матриц:
1.
Ez[i][j] += e[i][j] * ((Hx[i][j — 1] — Hx[i][j]));
2.
Ez[i][j] += e[i][j] * Hy[i][j];
3.
Ez[i][j] -= e[i][j] * Hy[i — 1][j];
Возможно некоторые циклы, в которых есть обращение к нескольким строкам, будет эффективнее разбить на несколько проходов, где идут обращения только к одной строке.
Например вместо одного прохода со строчкой
Ez[i][j] += e[i][j] * ((Hx[i][j — 1] — Hx[i][j] + Hy[i][j] — Hy[i — 1][j]));
сделать два прохода:
1:
Ez[i][j] += e[i][j] * ((Hx[i][j — 1] — Hx[i][j] + Hy[i][j]));
2:
Ez[i][j] -= e[i][j] * Hy[i — 1][j];
3) Проверить, могут ли лябмды/стримы ускорить основной цикл или дополнителные.
Не помогут. Лямбды и стримы — чтобы сделать код более удобным. В лучшем случае вы получите приблизительно такой же native-код с той же производительностью. В худшем случае — всё станет заметно медленнее.
К чему относится этот текст?
Подсказка: к коду над этим текстом он не подходит.
1.
Ez[i][j] += e[i][j] * ((Hx[i][j — 1] — Hx[i][j]));
2.
Ez[i][j] += e[i][j] * Hy[i][j];
3.
Ez[i][j] -= e[i][j] * Hy[i — 1][j];
Например вместо одного прохода со строчкой
Ez[i][j] += e[i][j] * ((Hx[i][j — 1] — Hx[i][j] + Hy[i][j] — Hy[i — 1][j]));
сделать два прохода:
1:
Ez[i][j] += e[i][j] * ((Hx[i][j — 1] — Hx[i][j] + Hy[i][j]));
2:
Ez[i][j] -= e[i][j] * Hy[i — 1][j];