ФлеймФорумПрограммирование

Общие вопросы по программированию (1315 стр)

Страницы: 11312 1313 1314 1315 1316 1317 Следующая »
#19710
21:07, 9 ноя 2025

Гугловый ГПТ на серьезных щах заявляет, что я могу смело конкатенировать строки так:

#include "my_folder/" "my_header.h"

Вот же брехло.

#19711
22:08, 9 ноя 2025

nes
> Гугловый ГПТ на серьезных щах заявляет, что я могу смело конкатенировать строки так

Вообще конкатенировать строки так действительно можно, но вот только не внутри #include (и, вероятно, нельзя и в других директивах препроцессора), о чем вот я не знал, пока сам не проверил. И ГПТ тоже, видать, не знал, и экстраполировал общее правило, как и я в #19697.

#19712
5:53, 10 ноя 2025

о чем вот я не знал, пока сам не проверил. И ГПТ тоже, видать, не знал, и экстраполировал общее правило, как и я в #19697.

Ну шож вы так? :)

#19713
0:01, 13 ноя 2025

nes
> Можно ли как-то добиться такого поведения в крестах?
Когда тебе надо вскипятить воду, ты тоже разводишь костер во дворе? ;)

+ Показать
#19714
12:06, 13 ноя 2025

Пока сам не понимаю точно суть своего вопроса, пока сформулирую, может быть пойму :)

Есть последовательность некоторых элементов, суть элементов не важна (однотипные структуры в памяти, буду обозначать просто буквами).
Есть последовательный ридер, умеющий читающий N таких элементов, лежащих подряд в памяти.

Последовательность очень длинная, необходимо оптимизировать ее представление в памяти, благо в последовательности скорее всего будет много повторяющихся кусков. Только какие это куски и их размеры - надо это как то определить.

Например, абстрактно надо получить на выходе такую последовательность (здесь короткая, для примера):

A B C D E F G H F G H A B C


Если я разобью последовательность так:

(A B C D) (E F G H) (F G H A B C)

, то вижу, что могу в памяти расположить элементы так:

E F G H A B C D

, а потом ридеру дать команды
- читай 4 элемента, начиная с индекса 4
- читай 4 элемента, начиная с индекса 0
- читай 6 элементов, начиная с индекса 1

и получу на выходе требуемый результат.

Информация об индексах и размерах кусков, конечно, тоже занимает место в памяти, причем размер дескриптора (индекс, количество) примерно равноценен размеру элемента (хотя было бы неплохо, чтоб для алгоритма можно было задать любое отношение размера элемента к размеру дескриптора куска)..

Как бы такую задачу оптимизации хранения последовательности для вышеуказанного ридера решить в общем виде, имея в качестве входных данных только итоговую последовательность?

#19715
12:59, 13 ноя 2025

Построить структуру типа префиксного дерева (слегка отличающуюся т.к. последовательность можно переиспользовать не только с первого символа) в которой посчитать какой "профит"  приносит каждая из последовательностей (сколько символов сэкономит с учетом размера дескриптора и самой последовательности).
Дальше будем последовательно добавлять в память одну из последовательностей, пересчитывать дерево без нее, повторять.

Сразу добавлять в память самую выгодную последовательность я так понимаю нельзя, может быть ситуация когда кодирование оставшихся кусков окажется менее оптимальным чем без нее, поэтому используем метод ветвей и границ - сначала последовательно добавляя самую выгодную получим верхнюю границу, дальше перебираем менее выгодные ветки останавливаясь если граница превышена и постепенно ее улучшаем.

#19716
13:09, 13 ноя 2025

kipar, так отдельных мелких последовательностей нет. Если рассматривать вообще все возможные разбиения исходной последовательности на подпоследовательности - комбинаторный взрыв.

#19717
(Правка: 15:03) 13:58, 13 ноя 2025

Dmitry_Milk
например сначала просто префиксное дерево (в каждом узле пишем сколько сэкономим с учетом родительских узлов), а потом в каждый узел добавляем экономию из узлов совпадающих начиная с 2, 3 и т.д. символа.

еще из идей - ограничить глубину скажем 5, но в каждом листе с глубиной 5 хранить точку где он встретился. Если найдем его повторно - увеличиваем глубину в этом месте пока не найдется расхождение, т.е. чтобы любой не-лист с глубиной больше 5 встречался хотя бы дважды в тексте.

#19718
5:21, 23 ноя 2025

Почему в векторных расширениях (SSE/AVX) архитектур x86 и x64 из горизонтальных операций до сих пор есть только сложение и вычитание? Почему нет хотя бы умножения и деления, я уже не говорю о большем, таком, как минимум, максимум, сравнение и прочее.

#19719
(Правка: 1:24) 1:20, 29 ноя 2025

Почему в векторных расширениях (SSE/AVX) архитектур x86 и x64 из горизонтальных операций до сих пор есть только сложение и вычитание? Почему нет хотя бы умножения и деления, я уже не говорю о большем, таком, как минимум, максимум, сравнение и прочее.

Ещё один прозрел. Что не Интел и не АМД не умеют делать нормальные процы.

Можно было бы в маске задавать операции горизонтальные(умножение,сложение,min,max и деление)
https://gamedev.ru/flame/forum/?id=292760&m=6115729#m12

#19720
7:49, 29 ноя 2025

prowkan
> Почему в векторных расширениях (SSE/AVX) архитектур x86 и x64 из горизонтальных операций до сих пор есть только сложение и вычитание? Почему нет хотя бы умножения и деления, я уже не говорю о большем, таком, как минимум, максимум, сравнение и прочее.
>
>
А зачем? Все же и так купят новый процессор, потому что он же мощнее ))

#19721
8:09, 29 ноя 2025

prowkan
> Почему в векторных расширениях (SSE/AVX) архитектур x86 и x64 из горизонтальных операций до сих пор есть только сложение и вычитание?

Потому что все эти расширения развивались от потребностей. Сперва сделали параллельную обработку массивов - супер. Потом поняли что для умножения векторов было бы удобно шаффлить вот тут и тут - сделали. Потом поняли, что для перемножения матриц было бы круто горизонтально сложить - сделали. И т.п.

#19722
(Правка: 9:19) 9:17, 29 ноя 2025

Потому что все эти расширения развивались от потребностей. Сперва сделали параллельную обработку массивов - супер. Потом поняли что для умножения векторов было бы удобно шаффлить вот тут и тут - сделали. Потом поняли, что для перемножения матриц было бы круто горизонтально сложить - сделали.

Все это уже понимали в 18 веке.

А до Интела и АМД дошло как в том анекдоте до жирафа на третий день :)

#19723
16:10, 29 ноя 2025

prowkan
> Почему в векторных расширениях (SSE/AVX) архитектур x86 и x64 из горизонтальных операций до сих пор есть только сложение и вычитание?
Это какие? Везде для prefix sum нужно перестановки делать

#19724
16:43, 29 ноя 2025

Это какие?

haddps горизонтальное сложение.

Страницы: 11312 1313 1314 1315 1316 1317 Следующая »
ФлеймФорумПрограммирование