Re[6]: 2D-Linq и оптимизация цифровых фильтров - 3
От: Sinclair Россия https://github.com/evilguest/
Дата: 02.07.18 09:23
Оценка:
Здравствуйте, Sinatr, Вы писали:

S>Здравствуйте, Sinclair, Вы писали:


S>>Вся "лапша" — в моём коде.

S>>В коде прикладного программиста ничего этого нет.
S>>У него — просто
S>>from d in data select (d[-1, 0] + d[1, 0] + d[0, -1] + d[0, 1]) / 4;

S>Не совсем понял, как это будет вызываться. Что тут data?

примерно так:
var data = new int[3000, 4000];
// init data with the content
var filtered = from d in data select (d[-1, 0] + d[1, 0] + d[0, -1] + d[0, 1]) / 4; // C4-filtering

S>Вы сделаете кучу оптимизированных методов, которые будут использоваться "прикладными" программистами? Или кто будет писать эти методы с лапшой? Где будет находится валидация, что если я, прикладной, напишу d[-2,0]?
Валидация выполняется внутри кода метода Select. Если передать внутри выражения ядра d[-2,0], то вызываться ядро будет начиная с третьей строки исходного массива (см. KernelMeasure.Measure(kernel) ).
S>Я так понял, что вы добились в 2 раза большей производительности. Но я пока не понимаю как (в IL ни бум бум). Скажите, эта оптимизация возможна только для linq? Или linq используется только для читаемости? У меня просто подозрение, что заголовок желтый и к linq это никакого отношения не имеет.
Linq используется для того, чтобы разделить стратегю исполнения и сам "запрос".
Если я напишу вручную двойной цикл, то валидацию размеров фильтра и оптимизацию исполнения мне тоже придётся писать вручную.
А если я пишу его в стиле Linq, то за меня всё это делает библиотека.
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.