170 похожих чатов

private static int CountTriples256v2(int[] arr, int

sum)
{
int n = arr.Length;
int count = 0;
var vCount = Vector<int>.Count;
ref int p = ref arr[0];
var sumVector = new Vector<int>(sum);
for (int i = 0; i < n; i++)
{
for (int j = i + 1; j < n; j++)
{
var ijSum = arr[i] + arr[j];
var ijSumVector = new Vector<int>(ijSum);
var k = j + 1;
for (; k < n - vCount; k += vCount)
{
var kVector = Vector.LoadUnsafe(ref p, (nuint)k);
var ijkSumVector = kVector + ijSumVector;
var subResult = Vector.Equals(sumVector, ijkSumVector);
if (subResult != Vector<int>.Zero)
{
var sumCount = Vector.Sum(subResult);
count -= sumCount;
}
}

for (; k < n; k++)
count += ijSum + arr[k] == sum ? 1 : 0;
}
}
return count;
}

6 ответов

6 просмотров

Vector.LoadUnsafe(ref p, (nuint)k) это уже на грани байтоёбства

EgorBo- Автор вопроса

4х хуже

EgorBo
4х хуже

Чот я потестил, 225+-

EgorBo
4х хуже

private static int CountTriples512v3(int[] arr, int sum) { int n = arr.Length; int count = 0; var vCount = Vector512<int>.Count; ref int p = ref arr[0]; var sumVector = Vector512.Create(sum); for (int i = 0; i < n; i++) { for (int j = i + 1; j < n; j++) { var ijSum = arr[i] + arr[j]; var ijSumVector = Vector512.Create(ijSum); var k = j + 1; for (; k < n - vCount; k += vCount) { var kVector = Vector512.LoadUnsafe(ref p, (nuint)k); var ijkSumVector = kVector + ijSumVector; var subResult = Vector512.Equals(sumVector, ijkSumVector); if (subResult != Vector512<int>.Zero) { var sumCount = Vector512.Sum(subResult); count -= sumCount; } } for (; k < n; k++) count += ijSum + arr[k] == sum ? 1 : 0; } } return count; } вот это хуже но не в 4x

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

Обсуждают сегодня

А как старый хаскел с новым стыковать ? потому как тут работает https://play.haskell.org/saved/C3xpMzcd, а вот тут https://stepik.org/lesson/7602/step/9?unit=1473 нет ошибка C...
Fedor
75
Читаю сейчас [нет, уже больше не читаю!] курсовую о Булгакове, написанную, похоже, с помощью ChatGPT. Это удивительный психоделический опыт. Текст в основном написан в стиле б...
✨ Uni [🌊 В отпуске]
1
Комрады, хотел уточнить. Проперть в OnDestroy юнита-хозяина по-прежнему доступна? И еще уточнение: finalization юнита наступает раньше или позже OnDestroy?
Ed Doc
48
Вопрос, вот задание https://stepik.org/lesson/7602/step/9?unit=1473 вот код и ошибка, удивляет, что требуется еще и Semigroup так и должно быть, или я опять делаю ошибки ? htt...
Fedor
14
Вообще, меня бы даже такой вариант, наверное устроил бы: try tag.Read(0); finally end; Но этот AV не ловится и программа завершается Exception EAccessViolation in module C...
notme
12
Проблема с Windows scripting control Множество объектов получают iDispatch обертки и отдаются в скрипты. При этом скрипты могут эти обертки держать живыми очень долго, наприм...
Arioch The
16
Скажите, можно ли как-то "переместить" динамический массив из одной переменной в другую? Скажем, переместить из TList<> в TArray<>. Именно переместить, а не скопировать. Если ...
Eugene Krasnikov (ᴊɪɴ x)
37
комрады, че-та лыжы не едут var tmpFont: TFont; begin tmpFont:= TFont.Create; try case rgFontColor.ItemIndex of 0: tmpFont.Color:= clWindowText; 1: tmpFo...
Ed Doc
34
Да и вообще... как VBS/VBA производит вызов методов тогда? Как мне на Delphi сделать точно также, блин.... VBS/VBA не падают, а возвращают нормальный СОМ-объект, где можно про...
notme
10
Я тут пытаюсь переработать архитектуру подсистемы памяти ядра во что-то осмысленное. Есть pmm, который создает набор range’ей(пока что только для ядра, потом для юзерспейса), ...
Evg Resh
9
Карта сайта