Size: a a a

Rude P[rogramming]Offtop

2021 June 11

I

Ilmir in Rude P[rogramming]Offtop
Роланд прав.
источник

I

Ilmir in Rude P[rogramming]Offtop
Если что-то можно сделать неявным, лучше это делать неявным.
источник

I

Ilmir in Rude P[rogramming]Offtop
* Это я про оптимизации, а не про языковые фичи.
источник

AN

Alexander Nozik in Rude P[rogramming]Offtop
ты не понял. Что будет если к тензору 2х3 прибавить тензор 1х3
источник

I

Ilmir in Rude P[rogramming]Offtop
Ошибка будет типизации, очевидно же.
источник

AN

Alexander Nozik in Rude P[rogramming]Offtop
а вот нет. Посмотри как работает броадкастинг в нампае и джулии и скажешь свое компетентное мнение
источник

AN

Alexander Nozik in Rude P[rogramming]Offtop
источник

IP

Iaroslav Postovalov in Rude P[rogramming]Offtop
Экспресс-тест: напишите сложение двух небольших векторов через массивы, например, соберите/запустите под х86, дампните ассемблер, если addpd в нем не будет, то автоматики нет
источник

AN

Alexander Nozik in Rude P[rogramming]Offtop
Там в джепе все написано даже с асемблером.
источник

I

Ilmir in Rude P[rogramming]Offtop
Зависит, опять таки, мы скаляр растягиваем или нет. Если скаляр, то ничего страшного - это заполнение тензора одним и тем же значением. Иначе - ошибка типизации, как в, та-дам, фортране.
источник

AN

Alexander Nozik in Rude P[rogramming]Offtop
Так там не только скаляр растягивается. В этом  и проблема
источник

I

Ilmir in Rude P[rogramming]Offtop
Тогда, как я и сказал - ошибка типизации.
источник

ML

Mikhail Levchenko in Rude P[rogramming]Offtop
я б купил
источник

I

Ilmir in Rude P[rogramming]Offtop
Here is a simple scalar computation over elements of arrays:

void scalarComputation(float[] a, float[] b, float[] c) {
  for (int i = 0; i < a.length; i++) {
       c[i] = (a[i] * a[i] + b[i] * b[i]) * -1.0f;
  }
}

(We assume that the array arguments are of the same length.)

Here is an equivalent vector computation, using the Vector API:

static final VectorSpecies<Float> SPECIES = FloatVector.SPECIES_PREFERRED;

void vectorComputation(float[] a, float[] b, float[] c) {
   int i = 0;
   int upperBound = SPECIES.loopBound(a.length);
   for (; i < upperBound; i += SPECIES.length()) {
       // FloatVector va, vb, vc;
       var va = FloatVector.fromArray(SPECIES, a, i);
       var vb = FloatVector.fromArray(SPECIES, b, i);
       var vc = va.mul(va)
                  .add(vb.mul(vb))
                  .neg();
       vc.intoArray(c, i);
   }
   for (; i < a.length; i++) {
       c[i] = (a[i] * a[i] + b[i] * b[i]) * -1.0f;
   }
}

Ну, не очень выглядит.
источник

IP

Iaroslav Postovalov in Rude P[rogramming]Offtop
вы, похоже, не поняли шутку
источник

AN

Alexander Nozik in Rude P[rogramming]Offtop
Тык я это и хочу. А народ хочет другого. Пока форсировал решение.
источник

AN

Alexander Nozik in Rude P[rogramming]Offtop
Там еще в функцию можно вместо скаляра подставлять тензор и она автоматически тензоризуется. А если есть несколько аргументов, то тензоризуется по нескольким аргументам с убитыми правилами.
источник

IP

Iaroslav Postovalov in Rude P[rogramming]Offtop
Я к тому, что говорить про автоматику можно всегда, но надо смотреть на то, как она в итоге работает, а не исходить из того, что раз сказали, то будет
источник

AN

Alexander Nozik in Rude P[rogramming]Offtop
Так это в либу заорачивается
источник

IP

Iaroslav Postovalov in Rude P[rogramming]Offtop
Александр написал про автоматическую векторизацию вычислений
источник