• Почему gpu вычисления ILGPU медленнее в 10 раз чем CPU?

    AshBlade
    @AshBlade Куратор тега C#
    Просто хочу быть счастливым
    Вот из-за этого:
    // Initialize ILGPU.
         Context context = Context.CreateDefault();
         Accelerator accelerator = context.CreateCLAccelerator(1);//context.GetPreferredDevice(preferCPU: false)  .CreateAccelerator(context);
    
         // Load the data.
         using  MemoryBuffer1D<float, Stride1D.Dense> deviceData = accelerator.Allocate1D(input);
         using MemoryBuffer1D<float, Stride1D.Dense> deviceOutput = accelerator.Allocate1D<float>(output);
    
         // load / precompile the kernel
         Action<Index1D, ArrayView<float>, ArrayView<float>> loadedKernel =
             accelerator.LoadAutoGroupedStreamKernel<Index1D, ArrayView<float>, ArrayView<float>>(Kernel);
    
    
         // finish compiling and tell the accelerator to start computing the kernel
             loadedKernel((int)deviceOutput.Length, deviceData.View, deviceOutput.View);
             accelerator.Synchronize();


    Объяснение: ты в каждом тесте постоянно создаешь новые объекты, которые необходимы для работы фреймворка. Это должно быть тяжелые объекты (много содержат, тяжело инициализируются).
    Вынеси их инициализацию из-вне метода в какой нибудь Setup метод. Раз уж ты пользуешься BenchmarkDotNet, то вот помощь с этим

    UPD: оптимизировал бенчмарк - теперь GPU быстрее
    public class SampleBenchmark
    {
        static void Kernel(Index1D i, ArrayView<float> data, ArrayView<float> output)
        {
            output[i] = data[i % data.Length];
        }
        public static IEnumerable<object[]> Arguments => new[] {new object[]{new float[1000000], new float[1000000]} };
        private float[] _outputBuffer = new float[1000000];
        private float[] _inputBuffer = new float[1000000];
        
        private Context? _context;
        private Accelerator? _accelerator;
        private Action<Index1D, ArrayView<float>, ArrayView<float>>? _loadedKernel;
        private MemoryBuffer1D<float, Stride1D.Dense>? _deviceData;
        private MemoryBuffer1D<float, Stride1D.Dense>? _deviceOutput;
        
        [GlobalSetup]
        public void Setup()
        {
            var random = new Random();
            for (var i = 0; i < _inputBuffer.Length; i++)
            {
                _inputBuffer[i] = random.NextSingle();
            }
            
            _context = Context.CreateDefault();
            _accelerator = _context.GetPreferredDevice(preferCPU: false).CreateAccelerator(_context);
            _loadedKernel = _accelerator!.LoadAutoGroupedStreamKernel<Index1D, ArrayView<float>, ArrayView<float>>(Kernel);
            _deviceData = _accelerator!.Allocate1D(_inputBuffer);
            _deviceOutput = _accelerator!.Allocate1D(_outputBuffer);
        }
    
        [GlobalCleanup]
        public void TearDown()
        {
            _context?.Dispose();
            _accelerator?.Dispose();
            _deviceData?.Dispose();
            _deviceOutput?.Dispose();
        }
        [ArgumentsSource(nameof(Arguments))]
        [Benchmark]
        public void GPUTest(float[] input, float[] output)
        {
            // finish compiling and tell the accelerator to start computing the kernel
            _loadedKernel!((int)_deviceOutput.Length, _deviceData.View, _deviceOutput.View);
            _accelerator!.Synchronize();
        }
    
        [Benchmark]
        [ArgumentsSource(nameof(Arguments))]
        public void CpuTest(float[] input, float[] output)
        {
            for (var i = 0; i < input.Length; i++)
            {
                output[i] = input[i];
            }
        } 
    }


    | Method  | input           | output          | Mean      | Error    | StdDev   |
    |-------- |---------------- |---------------- |----------:|---------:|---------:|
    | GPUTest | Single[1000000] | Single[1000000] |  61.18 us | 0.101 us | 0.095 us |
    | CpuTest | Single[1000000] | Single[1000000] | 243.54 us | 3.114 us | 2.600 us |
    Ответ написан
    2 комментария
  • Можно ли на бекенд передавать все данные в заголовках HTTP?

    @psiklop
    Мне кажется это зависит от способа построения веб-приложения. Например как делаю я - не вижу одной точки входа заголовков и наоборот одну точка входа можно самому реализовать по другому.

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

    Ты не спалишь планки даже если ничего не будешь делать в БИОСЕ.

    Ну если хочешь посмотреть, то ставишь планку и можешь посмотреть какое напряжение мат.плата даёт на неё.
    Ответ написан
    Комментировать
  • К какому типу ИС относиться система тестовых заданий и онлайн опросов и класс защиты?

    @Everything_is_bad
    к такому который указан в вашей методичке
    Ответ написан
    Комментировать
  • Можно ли протирать монитор средством для чистки оптических поверхностей, если при этом нельзя использовать органические растворители?

    @alexalexes
    В протирке любой поверхности без разводов главной хитростью является то, что у вас должно быть две тряпочки: одна для нанесения жидкости (влажная тряпочка), другая - для удаления жидкости с поверхности (сухая тряпочка).
    При этом, не обязательно использовать состав с очищающими свойствами. Подойдет обычная вода (но для надежности можно взять фильтрованную).
    Ответ написан
    Комментировать
  • Как практиковаться в программировании?

    saboteur_kiev
    @saboteur_kiev Куратор тега Программирование
    software engineer
    Забей на программирование, это не твое.

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

    Найди ту деятельность, где у тебя глаза горят.
    Ответ написан
    4 комментария
  • Можно ли как добраться до iframe?

    delphinpro
    @delphinpro Куратор тега JavaScript
    frontend developer
    Получить доступ внутрь фрейма с другим доменом невозможно.
    Ответ написан
    Комментировать
  • Как создать процедуру, которая будет возвращать что-то?

    IvanU7n
    @IvanU7n
    nothing interesting here
    если речь именно про процедуры, то никак, т.к. они по определению ничего не возвращают
    если про функции, то https://www.postgresql.org/docs/current/sql-create... или дока про соответствующий язык
    Ответ написан
    Комментировать
  • Как называют "сервисный сбор" в корзине?

    ThunderCat
    @ThunderCat Куратор тега Веб-разработка
    {PHP, MySql, HTML, JS, CSS} developer
    Упаковка/сборка заказа, можно даже сделать ее бесплатной от какой-то суммы.
    Ответ написан
    1 комментарий
  • Блок питания для ПК потребляет электричество константно или динамически?

    @Drno
    Сколько система кушает, столько ей БП и выдает.
    Если в данный момент она кушает мало - БП и будет выдавать мало
    Вы же не думаете что 1-2 киловатные БП постоянно столько потребляют?)
    Ответ написан
    Комментировать
  • Как сейчас работает закон о маркировке рекламы в интернете?

    AshBlade
    @AshBlade
    Просто хочу быть счастливым
    Если вкратце, то алгоритм следующий:
    1. Находишь какого-нибудь ОРД (оператор рекламных данных)
    2. Регистрируешься у него (договор, можно даже с физ.лицом)
    3. Он выдает тебе инструкцию, как подключить рекламу на сайт

    Он тебе и ERID представит и статистику по кампании в РКН отправит.
    Самое простое, подключиться к яндекс директу - тебе только ставить нужный скрипт на сайт надо будет.

    Если хочешь свое запилить, то никто не мешает - главное, чтобы ERID был виден:
    - В изображении (в углу баннера)
    - В тексте (подпись внизу)
    Сами рекламные кампании создаются ОРД, список которых ведет РКН.

    Вот есть описание этого всего
    https://vc.ru/legal/963878-markirovka-reklamy-erir...

    Например, для яндекса все просто - надо только зарегистрироваться у них, а остальное сделают за тебя (вкладка "Паблишеры") - https://ord.yandex.ru/
    Ответ написан
    Комментировать
  • Удобно ли использование windows приложений в macos?

    liaFcipE
    @liaFcipE
    Не имеет смысла, у меня есть и мак и айфон и даже айпад, ниразу ничего ни с чем не интегрировал, лишь разок подключал айфон как еще одну камеру, 1 раз за все время, на час.

    Parallels работает неплохо, но это не для простых юзеров, удобно не будет.
    Не мучайте родителей, проще для них и вас будет так же - Windows.

    Брать MacBook не на M процессорах смысла - 0, возьмите любой нормальный ноут на винде, тем более, что щас выбор огромный и цены нормальные.

    p.s. был опыт попытки посадить девушку на мак, юзер не деревянный, успехом не увенчалось. Сидит в итоге на виндовом десктопе.
    Ответ написан
    7 комментариев
  • Совместимость сокета для процессоров Intel Pentium 4 630 и Core 2 Duo E8400?

    @LuchS-lynx
    инженер-ПТО
    Нет, нужно смотреть список поддерживаемых ЦП на сайте производителя, возможно это связано так же с чипсетом. Простой пример: топовая, в свое время, плата на 775м Сокете официально не поддерживает Core2Duo. Это Asus P5GDC-Deluxe, чипсет i915, при этом плата подлерживает Р4 600ю серию и серию D
    https://www.asus.com/ru/supportonly/p5gdc-v%20delu...
    Ответ написан
    Комментировать
  • Автоматическая генерация классов на основе других классов?

    AshBlade
    @AshBlade Куратор тега C#
    Просто хочу быть счастливым
    Для C# это можно сделать 2 путями (без учета ручного создания):
    - Source Generators
    - Генерация IL кода (динамическая сборка)

    Лично я за 1 вариант, т.к. он будет быстрее в рантайме (все уже скомпилировано).
    Ответ написан
    2 комментария
  • Как передать команде telnet имя пользователя и пароль?

    martin74ua
    @martin74ua
    Linux administrator
    man expect

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

    mayton2019
    @mayton2019
    Bigdata Engineer
    Agile не запрещает вам самим писать и согласовывать ТЗ. Для этого есть процедуры типа Груминг и прочее.

    Темпы современной разработки не то чтобы отменяют ТЗ а делают его просто сильно быстро неактуальным
    документом в силу того что бизнес очень быстро меняется
    . Поэтому пишите User Stories. Это и будет
    ваше основание для разработки. Пишите много. Добавляйте линки на Confluence.

    Возможен вариант что в вашу agile команду можно взять аналитика который будет заниматься только
    задачами анализа и согласования документов. Мы работали так. И я всем очень рекомендую иметь
    выделенную позицию для этого.

    Тоесть в самом agile нет ничего контр-продуктивного или вредящего. Agile - это про гибкость.
    А вот для кого по настоящему agile может быть плох - так это для бесполезного специалиста в команде
    которые никакой полезной работы не делает. Он пару спринтов побегает. Посимулирует активность
    и потом будет удален из команды т.к. задач для него не будет.
    Ответ написан
    4 комментария
  • Как реализовать сопоставление разных слов со схожим значением для использования как одной команды для голосового ассистента?

    AshBlade
    @AshBlade
    Просто хочу быть счастливым
    Для решения этой задачи подходит векторизация.
    Вкратце, слово представляется вектором из других слов (базовых) его описывающих. Тогда близость слов можно описать близостью векторов, его описывающих (косинусная близость). Это была теория.
    Практика здесь:
    - Обзор различных техник этого метода
    - Ссылки на питоновские библиотеки
    - Есть уже готовые фреймворки и предобученные модели
    Ответ написан
    1 комментарий
  • Как намекнуть начальству, что agile не избавляет от тз?

    AshBlade
    @AshBlade
    Просто хочу быть счастливым
    им всё равно нужно самостоятельно планировать работу и отвечать за неё?

    Этот момент мне не до конца понятен. Т.е., грубо говоря, начальство должно полностью разбираться в программировании, устройстве продукта, самостоятельно оценивать задачи и ганта строить?

    Если есть JIRA таски и что-то не понятно, то возвращайте и говорите, чтобы уточнили эти моменты.
    Лично я НЕ сторонник подхода, когда разработчику дают полностью готовую задачу и он должен только постучать по клавишам, чтобы это все закодировать. В вашем случае, получается, что разработчик такой же стекхолдер, он тоже участвует в развитии продукта, а не просто маленькая шестеренка.
    Ответ написан
    7 комментариев
  • В чем суть данной леммы из книги Фихтенгольца (том 1)?

    AshBlade
    @AshBlade
    Просто хочу быть счастливым
    1. Написание e > 0 - почти всегда означает бесконечно малое число. Брать такие большие числа как 10 для данной леммы не имеет смысла.
    2. В лемме ясно говорится о вещественных числах - ты в пример берешь целые. Т.е. дискретные вместо непрерывных

    Суть этой леммы такова - если для каждой пары s и s' , разница между которыми бесконечно мала есть 2 числа, которые всегда окажутся между ними, то эти 2 числа равны.
    Это полезно для чисел с плавающей точкой в программировании (double, float). Проверка равенства для них должна выполняться через эту лемму, но немного измененную: abs(a - b) < eps - означает что a и b равны
    Ответ написан
    1 комментарий