Заставьте GCC сохранять регистр SSE всюду по функции, которая использует встроенный asm

Обычно JSON более компактен, и быстрее проанализировать.

Предпочитают XML если:

  • необходимо обработать данные на клиенте, и можно усилить XSL для этого. Возможности являются XML +, цепочка XSL будет работать быстрее, чем JSON + JavaScript специально для больших блоков данных.
    • Один хороший случай должен преобразовать данные в отрывок HTML.
  • Различные случаи прежней версии:
    • существует существующий сервис XML, и это - стычка для перезаписи его с JSON по некоторым причинам.
    • необходимо отправить эти данные назад как XML после некоторой легкой обработки с помощью входа пользователя.

Один важный случай (почти) XML: попытайтесь обнаружить, когда отправка отрывков HTML будет более выгодной, чем отправка необработанных данных. AHAH может сделать чудеса в простых приложениях, все же часто пропускаемых. Обычно этот стиль предполагает, что сервер отправляет отрывки HTML, которые будут встроены в веб-странице без обработки.

Обычно в CSS случаев AHAH усиливается к макс. для массирования отрывков визуально и реализации простых условных выражений как сокрытие/показ соответствующих частей отрывка с помощью определенных для пользователя или специализированных настроек.

7
задан Deduplicator 18 February 2015 в 15:18
поделиться

3 ответа

Я думаю, что решение здесь состоит в том, чтобы сообщить gcc, что ваш тип vec2_t на самом деле является вектором; тогда вы можете просто вычислить инвариантное значение цикла и рассматривать его как обычную переменную (за исключением того, что компилятор знает, что это векторный тип):

typedef double vec2_t __attribute__ ((vector_size (16)));

void function()
{
  /* get a specific value set up, e.g. */
  vec2_t invariant;
  asm( "some calculations, soring result in invariant."
       : "=x" (invariant) );

  for( int i = 0; i<N; i++ ){
    asm(
            "Some calculations;"
            "on an element of;"
            "a data set.;"
            "The value in xmm1;"
            "is needed;"
            : "x" (invariant) // and other SSE arguments
       );
   }
}

Я просто скомпилировал это с помощью простого вычисления внутри цикла и по крайней мере с оптимизацией на уровне 1 значение инварианта сохраняется в регистре XMM во время цикла.

(Все это предполагает, что вам не требуется инвариант цикла в явном регистре XMM; и что вы можете использовать обычное распределение регистров GCC).

8
ответ дан 6 December 2019 в 15:25
поделиться

Я думаю, что лучше оставить регистр присваивания компилятору. Вероятно, он сможет отслеживать это лучше, чем вы. GCC уже будет использовать расширения SSE, но если вы уверены, что знаете лучше, используйте функции GCC __builtin. Честно говоря, я немного сомневаюсь, что вы сделаете это быстрее.

Удачи!

Эти сайты, вероятно, интересно посмотреть.

Встроенные функции GCC X86

Работа с SIMD с GCC

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

Я привык работать с ассемблером и C, и я бы здесь написал всю функцию на ассемблере. Если у вас гибкая система сборки, я рекомендую собрать функцию ASM отдельно и связать ее со своим приложением. Единственная проблема заключается в том, что функция не может быть встроена компилятором.

void function (void); // C

extern "C" function (void); // C ++

3
ответ дан 6 December 2019 в 15:25
поделиться
Другие вопросы по тегам:

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