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.
Нет, это не так. Причина, по которой частные переменные и методы недоступны из других классов, заключается в том, чтобы позволить вам изменять внутренние компоненты вашего класса без необходимости изменять весь код, который использует класс (это и для предотвращения того, чтобы пользователь вашего класса, например, установил переменную до значения, которого никогда не должно быть).
Если вы используете частные переменные других объектов, это ничего не повредит, потому что, если вы реструктурируете внутренние компоненты своего класса, вам придется изменить код внутри класса в любом случае.
Я всегда использую геттеры, потому что иногда геттер - это не просто return (foo). Иногда они инициализируют объекты, если они равны нулю, или в них ведется отладочный журнал, или каким-то образом проверяют текущее состояние. Он более последовательный.
Я не думаю, что это плохая практика, но это особенность языка. Это не только позволяет вам проверить равно
, как вы это делаете, но также полезно в шаблоне прототипа для создания объекта.
Это нормально и совершенно нормально. Немного странно думать, что this
может возиться с частными полями other
, но это нормально, потому что ничего плохого не может случиться, если третья сторона может сбрасывать данные с внутреннего устройства объекта Odp
. Любой метод класса Odp
может изменять любые закрытые члены любого объекта Odp
, даже не this
, но это нормально, поскольку любые такие методы, очевидно, могут быть доверенный!