(любой == Система. DBNull. Значение) по сравнению с (любой - Система. DBNull)

Осторожно: _mm256_fmadd_ps не является частью AVX1. FMA3 имеет свой собственный бит функции и был представлен только на Intel с Haswell. AMD представила FMA3 с Piledriver (AVX1 + FMA4 + FMA3, без AVX2).


На уровне asm, если вы хотите получить восемь 32-битных элементов в целочисленные регистры, на самом деле быстрее хранить стек, а затем выполнять скалярные нагрузки. pextrd представляет собой 2-юп-инструкцию для семейства SnB и семейства Bulldozer. (и Nehalem и Silvermont, которые не поддерживают AVX).

Единственным процессором, где vextractf128 + 2x movd + 6x pextrd не страшно, является AMD Jaguar. (дешевый pextrd и только один порт нагрузки.) (см. таблицы insner Agner Fog )

Широкое ориентированное хранилище может переходить на перекрывающиеся узкие нагрузки. (Конечно, вы можете использовать movd для получения элемента low, поэтому у вас есть соединение с портом загрузки и портом ALU).


Конечно, вы, кажется, извлекаете float s, используя целочисленный экстракт, а затем преобразовывая его обратно в float. Это кажется ужасным.

Что вам действительно нужно, каждый float в нижнем элементе собственного xmm-регистра. vextractf128, очевидно, способ начать, приведя элемент 4 к нижней части новой xmm reg. Тогда 6x AVX shufps может легко получить остальные три элемента каждой половины. (Или movshdup и movhlps имеют более короткие кодировки: нет непосредственного байта).

7 shuffle uops заслуживают рассмотрения против 1 магазина и 7 загрузочных дисков, но не если вы собираетесь проливать вектор для вызова функции.


соображения ABI:

Вы находитесь в Windows, где xmm6-15 защищены от вызова (только low128; верхние половины ymm6 -15 сбрасываются с помощью вызова). Это еще одна причина для начала работы с vextractf128.

В SysV ABI все регистры xmm / ymm / zmm вызываются вызовом, поэтому для каждой функции print() требуется пролитие / перезагрузка. Единственное, что нужно сделать, - сохранить память в памяти и вызвать print с исходным вектором (т. Е. Напечатать нижний элемент, потому что он будет игнорировать остальную часть регистра). Затем movss xmm0, [rsp+4] и называть print на втором элементе и т. Д.

Вам нехорошо получить все 8 поплавков, красиво распакованных в 8 векторных рег, потому что все они должны разливаться отдельно так или иначе перед первым вызовом функции!

10
задан icebat 4 December 2014 в 09:23
поделиться

6 ответов

if (any == System.DBNull.Value) ...

Я предпочитаю, что один, просто потому что я считал, что как сравнение значений, не вводит.

4
ответ дан 3 December 2019 в 21:24
поделиться

Я склонен использовать

if (DBNull.Value.Equals(value)) {
    //
}

или

if (Convert.IsDBNull(value)) {
    //
}
11
ответ дан 3 December 2019 в 21:24
поделиться

is не использует отражение, как говорит Kevlar623. Это отображается на isinst операция в IL. На том уровне, сравнивая производительность совершенно глупо, если Вы не работаете над ракетной системой наведения.

Я использую value is DBNull. Это просто звучит правильным и как параноидальный разработчик, я не могу положить, что единственное значение, когда-либо существующее, DBNull.Value. Ошибки происходят.

5
ответ дан 3 December 2019 в 21:24
поделиться

Мне нравится, "Система. DBNull" больше, потому что я ненавижу идею сравнить что-то с ПУСТЫМ УКАЗАТЕЛЕМ и иметь его быть верным. Много других синтаксисов (что, черт возьми, множественное число этого?) имел бы что-либо ==, ПУСТОЙ УКАЗАТЕЛЬ возвращает ПУСТОЙ УКАЗАТЕЛЬ.

Я понимаю, что существует DBNull. Значение по причине. Я знаю. Я перечисляю свое ПРЕДПОЧТЕНИЕ :)

-1
ответ дан 3 December 2019 в 21:24
поделиться

Это - хороший пример формы, следует за функцией. Какой бы ни каждый выполняется, более эффективно способ пойти. То, на что это похоже, читает как, или плохие имена, которые это звонит Вам, не важны. Используйте язык эффективно, не прессуйте язык в новый.

-2
ответ дан 3 December 2019 в 21:24
поделиться

если Вы находитесь в c#, необходимо использовать ==; is отражение использования, которое является более дорогим для вычислений, тем более, что существует только когда-либо один экземпляр System.DBNull.

0
ответ дан 3 December 2019 в 21:24
поделиться
Другие вопросы по тегам:

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