SET ORACLE_SID=<YOUR SID HERE>
sqlplus scott/tiger@DB < sql1.sql > data1.txt
sqlplus scott/tiger@DB < sql2.sql > data2.txt
Я думаю, что все три фактически одинаковы, то есть 128-битные побитовые операции. Причина, по которой существуют разные формы, вероятно, историческая, но я не уверен. Я предполагаю, что возможно , что может быть некоторое поведение в версиях с плавающей точкой, например. когда есть NaNs, но это чистое догадки. Для нормальных входов инструкции кажутся взаимозаменяемыми, например
#include <stdio.h>
#include <emmintrin.h>
#include <pmmintrin.h>
#include <xmmintrin.h>
int main(void)
{
__m128i a = _mm_set1_epi32(1);
__m128i b = _mm_set1_epi32(2);
__m128i c = _mm_or_si128(a, b);
__m128 x = _mm_set1_ps(1.25f);
__m128 y = _mm_set1_ps(1.5f);
__m128 z = _mm_or_ps(x, y);
printf("a = %vld, b = %vld, c = %vld\n", a, b, c);
printf("x = %vf, y = %vf, z = %vf\n", x, y, z);
c = (__m128i)_mm_or_ps((__m128)a, (__m128)b);
z = (__m128)_mm_or_si128((__m128i)x, (__m128i)y);
printf("a = %vld, b = %vld, c = %vld\n", a, b, c);
printf("x = %vf, y = %vf, z = %vf\n", x, y, z);
return 0;
}
$ gcc -Wall -msse3 por.c -o por
$ ./por
a = 1 1 1 1, b = 2 2 2 2, c = 3 3 3 3
x = 1.250000 1.250000 1.250000 1.250000, y = 1.500000 1.500000 1.500000 1.500000, z = 1.750000 1.750000 1.750000 1.750000
a = 1 1 1 1, b = 2 2 2 2, c = 3 3 3 3
x = 1.250000 1.250000 1.250000 1.250000, y = 1.500000 1.500000 1.500000 1.500000, z = 1.750000 1.750000 1.750000 1.750000
В соответствии с рекомендациями по оптимизации Intel и AMD смешивание типов op с типами данных приводит к удару по производительности, поскольку ЦП внутренне пропускает 64-битные половинки регистра для определенного типа данных. Это, по-видимому, в основном влияет на облицовку труб, когда команда декодируется, и запланированы команды. Функционально они дают одинаковый результат. Более новые версии для целых типов данных имеют большую кодировку и занимают больше места в сегменте кода. Поэтому, если размер кода является проблемой, используйте старые операционные системы, поскольку они имеют меньшую кодировку.
orps
и позжеorpd
как после i>por
. И физическая основа SSE никогда не менялась. – Potatoswatter 10 May 2010 в 21:53