Java: Доступ к частным полям непосредственно от другого экземпляра того же класса

SIMD, которого SSE является примером, позволяет Вам делать ту же операцию на нескольких блоках данных. Так, Вы не получите преимущества для использования SSE как прямая замена для целочисленных операций, Вы только получите преимущества, если можно сделать операции на нескольких элементах данных сразу. Это включает загрузку некоторых значений данных, которые непрерывны в памяти, делая необходимую обработку и затем продвижение в следующий набор значений в массиве.

проблемы:

1, Если путь выполнения кода является иждивенцем на обработанных данных, SIMD становится намного более твердым реализовать. Например:

a = array [index];
a &= mask;
a >>= shift;
if (a < somevalue)
{
  a += 2;
  array [index] = a;
}
++index;

не легко сделать как SIMD:

a1 = array [index] a2 = array [index+1] a3 = array [index+2] a4 = array [index+3]
a1 &= mask         a2 &= mask           a3 &= mask           a4 &= mask
a1 >>= shift       a2 >>= shift         a3 >>= shift         a4 >>= shift
if (a1<somevalue)  if (a2<somevalue)    if (a3<somevalue)    if (a4<somevalue)
  // help! can't conditionally perform this on each column, all columns must do the same thing
index += 4

2, Если данные не непрерывны, тогда загрузка данных в инструкции SIMD громоздкая

3, код является конкретным процессором. SSE находится только на IA32 (Intel/AMD), и не все CPU IA32 поддерживают SSE.

необходимо проанализировать алгоритм и данные, чтобы видеть, может ли это быть SSE'd, и это требует знания, как SSE работает. Существует много документации относительно веб-сайта Intel.

11
задан BIBD 13 October 2009 в 16:32
поделиться

4 ответа

Нет, это не так. Причина, по которой частные переменные и методы недоступны из других классов, заключается в том, чтобы позволить вам изменять внутренние компоненты вашего класса без необходимости изменять весь код, который использует класс (это и для предотвращения того, чтобы пользователь вашего класса, например, установил переменную до значения, которого никогда не должно быть).

Если вы используете частные переменные других объектов, это ничего не повредит, потому что, если вы реструктурируете внутренние компоненты своего класса, вам придется изменить код внутри класса в любом случае.

6
ответ дан 3 December 2019 в 05:13
поделиться

Я всегда использую геттеры, потому что иногда геттер - это не просто return (foo). Иногда они инициализируют объекты, если они равны нулю, или в них ведется отладочный журнал, или каким-то образом проверяют текущее состояние. Он более последовательный.

9
ответ дан 3 December 2019 в 05:13
поделиться

Я не думаю, что это плохая практика, но это особенность языка. Это не только позволяет вам проверить равно , как вы это делаете, но также полезно в шаблоне прототипа для создания объекта.

5
ответ дан 3 December 2019 в 05:13
поделиться

Это нормально и совершенно нормально. Немного странно думать, что this может возиться с частными полями other , но это нормально, потому что ничего плохого не может случиться, если третья сторона может сбрасывать данные с внутреннего устройства объекта Odp . Любой метод класса Odp может изменять любые закрытые члены любого объекта Odp , даже не this , но это нормально, поскольку любые такие методы, очевидно, могут быть доверенный!

1
ответ дан 3 December 2019 в 05:13
поделиться
Другие вопросы по тегам:

Похожие вопросы: