Скорость операций по незамеченным данным

к моему знанию, процессор лучше всего выполняет с помощью данных, которая выровнена на границе, равной размеру этой даты. Например, если каждый int в диапазоне составляет 4 байта по размеру, то адрес каждого INT должен быть кратным 4, чтобы сделать CPU счастливым; То же самое с 2-байтом коротких данных и 8-байт Double данные. По этой причине New Оператор и функция функция функция всегда возвращает адрес, который является кратным из 8 и, следовательно, является кратным из 4 и 2.

в моей программе, Некоторые критические во времени алгоритмы, которые предназначены для обработки больших байтовых массивов, позволяют проводить вычисление, преобразуя каждый смежный 4 байта в int и, таким образом, сделать арифметику намного быстрее. Однако адрес байтового массива составляет , не гарантированно, чтобы быть кратным 4, потому что может быть обработана только часть байтового массива.

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

// the address of array0 is a multiple of 4:
unsigned char* array0 = new unsigned char[4];
array0[0] = 0x00;
array0[1] = 0x11;
array0[2] = 0x22;
array0[3] = 0x33;
// the address of array1 is a multiple of 4 too:
unsigned char* array1 = new unsigned char[5];
array1[0] = 0x00;
array1[1] = 0x00;
array1[2] = 0x11;
array1[3] = 0x22;
array1[4] = 0x33;
// OP1: the address of the 1st operand is a multiple of 4,
// which is optimal for an unsigned int:
unsigned int anUInt0 = *((unsigned int*)array0) + 1234;
// OP2: the address of the 1st operand is not a multiple of 4:
unsigned int anUInt1 = *((unsigned int*)(array1 + 1)) + 1234;

, поэтому вопросы:

  1. , насколько более медленнее является OP2 по сравнению с OP1 на процессорах X86, X86-64 и Itanium (Если пренебрегают стоимостью роста типа качения и природу адреса)?

  2. При написании кроссплатформенного портативного кода, о каких процессорах я должен обеспокоен недооценшим доступом к данным? (Я уже знаю о RISC)

7
задан Desmond Hume 17 September 2011 в 08:24
поделиться