Три мысли:
1), Если Вы собираетесь сделать что-то другое на основе типов объектов, могло бы иметь смысл перемещать то поведение в те классы. Тогда вместо переключателя или если еще, Вы просто назвали бы childNode. DoSomething ().
2) Выдерживающие сравнение типы будут намного быстрее, чем сравнения строк.
3) В, если еще дизайн, Вы могли бы быть в состоянии использовать в своих интересах переупорядочение тестов. Если объекты "Jill" составляют 90% объектов, проходящих там, теста для них сначала.
Многие ЦП имеют наборы команд «вектор» или «SIMD», которые применяют одну и ту же операцию одновременно к двум, четырем или более частям данных. Современные микросхемы x86 имеют инструкции SSE, многие микросхемы PPC имеют инструкции «Altivec», и даже некоторые микросхемы ARM имеют набор векторных инструкций, называемый NEON.
«Векторизация» (упрощенная) - это процесс перезаписи цикла таким образом, чтобы вместо обработки одного элемента массива N раз, он обрабатывает (скажем) 4 элемента массива одновременно N / 4 раза.
(Я выбрал 4, потому что это то, что современное оборудование, скорее всего, напрямую поддерживает; Рассмотрим следующий очень простой цикл, который добавляет элементы двух массивов и сохраняет результаты в третий массив.
for (int i=0; i<16; ++i)
C[i] = A[i] + B[i];
Развертывание этого цикла преобразует его во что-то вроде этого:
for (int i=0; i<16; i+=4) {
C[i] = A[i] + B[i];
C[i+1] = A[i+1] + B[i+1];
C[i+2] = A[i+2] + B[i+2];
C[i+3] = A[i+3] + B[i+3];
}
Векторизация, с другой стороны, дает что-то вроде это:
for (int i=0; i<16; i+=4)
addFourThingsAtOnceAndStoreResult(&C[i], &A[i], &B[i]);
Где «addFourThingsAtOnceAndStoreResult» - это заполнитель для любых встроенных функций, которые ваш компилятор использует для определения векторных инструкций. Обратите внимание, что некоторые компиляторы могут автоматически векторизовать очень простые циклы, подобные этому, которые часто можно включить с помощью параметра компиляции. Более сложные алгоритмы по-прежнему требуют помощи программиста для создания хорошего векторного кода.
Векторизация - это термин для преобразования скалярной программы в векторную программу. Векторизованные программы могут выполнять несколько операций из одной инструкции, тогда как скаляр может работать только с парами операндов одновременно.
Из wikipedia :
Скалярный подход:
for (i = 0; i < 1024; i++)
{
C[i] = A[i]*B[i];
}
Векторизованный подход:
for (i = 0; i < 1024; i+=4)
{
C[i:i+3] = A[i:i+3]*B[i:i+3];
}
Это относится к способности выполнять одну математическую операцию над списком - или «вектором» - чисел за один шаг. Вы часто видите это с Фортраном, потому что это связано с научными вычислениями, которые связаны с суперкомпьютерами, где впервые появилась векторизованная арифметика. В настоящее время почти все настольные процессоры предлагают некоторую форму векторизованной арифметики с помощью таких технологий, как Intel SSE. Графические процессоры также предлагают форму векторизованной арифметики.
См. Два ответа выше. Я просто хотел добавить, что причина того, что я хочу сделать векторизацию, заключается в том, что эти операции могут легко выполняться в параллельном режиме суперкомпьютерами и мультипроцессорами, что дает большой прирост производительности. На однопроцессорных компьютерах не будет увеличения производительности.