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

    @SergeySerge11 Автор вопроса
    А не подскажите, задавал вопрос, на счет с# IL Clr,
    как на основе байт-кода одного метода сделать другой через DynamicILInfo ?
    К примеру скомпилировал один динамический метод, через время потребовалось в нем изменить Token call метода. или константу, или скопировать как есть.
    Через ILGenerator Долго, так как проделают не нужную работу/
    Просто не понимаю, как DynamicILInfo.SetCode пользоваться, вроде ожидаю одно, а получаю супер критические ошибки Не совпадения сигнатур, при копировании байт-кода одного в SetCode нового.
    Написано
  • Как передаются регистры в трансляторах? Как происходит переход, от виртуальных регистров к машинным?

    @SergeySerge11 Автор вопроса
    Василий Банников, не точно, но думаю она не относится к этому списку в контексте. (не про такие регистры спрашиваю) типа она на уровень ниже в отношении client_code->il_code->native_code, ее регистры мне не надо поддерживать. Уже что там, то само разберётся, как ему там быть.
    Хотя кажется во варианты решения на ум пришли, прям пушка бомба, вроде так и должно быть, но найти не могу почитать что.
    Написано
  • Как скопировать метод IL кода?

    @SergeySerge11 Автор вопроса
    #, С машинным кодом кстати такой же вопрос. Но вопрос не актуален. Так как CLR долго вызывает unmagmend методы даже с SuppressGCTransition.
    Может там как-то и можно сделать безопасный делегат, подкрутить метаданные, но литературы ни какой нету.
    А вот через IL я понять не могу, почему не выходит. Почему просто тело функции скопировать недостаточно.
    Вот для примера, пример функция А. Раскрутить цикл.
    Делегат А вызывается в Цикле N раз.
    Легко можно сделать ILКод без цикла, с N вызовами функций последовательно.

    Теперь хочу сделать то же самое для функции B, замечу, что если сигнатура метода одинаковая, то разница между ними только байты Token-а call метода. Через ILGenerator нету смысла крутить так же, так как он при сборке кода, много лишней(уже продельной) работы выполняет, и вернет тот же результат по сути.
    И я просто могу(не могу) скопировать байткод, и заменить то что нужно(Да даже просто скопировать не выходит).
    Написано
  • Как скопировать метод IL кода?

    @SergeySerge11 Автор вопроса
    Nik Faraday, через ILGenerator любой может, А как через DynamicILInfo.
    Вот есть динамический метод, мне нужно заменить в этом методе константу к примеру.
    Через ILGenerator пересоздавать новый долго.
    Мне заранее известно куда и что вставлять. Так что можно просто скопировать массив кода в теории(по факту SetCode не работает) Там какие-то сигнатуры SignatureHelper нужны, но не понимаю как их достать. Методом перебора уже 100 вариантов перепробовал.
    Написано
  • Как записать управляемый объект делегата, в неуправляемую память, или какие есть решения?

    @SergeySerge11 Автор вопроса
    Решил проблему через замену делегата, на указатель на его funPtr
    delegate(*) delegat.Method.MethodHandle.GetFunctionPointer();
    вроде как FunctionPointer не куда не сможет сбежать. Хотя всегда хотел бы что бы дилегат(или другой тип дилегатов был бы) всегда указывали на машинный код, а не куда-то между .
    Написано
  • Как получить unsafe delegate из обычного делегата? В чем ошибка?

    @SergeySerge11 Автор вопроса
    Исправил добавив unmanaged
    return (delegate*unmanaged void>)Marshal.GetFunctionPointerForDelegate(d);
    Только не разу не понял почему.
    А вот эти delegate*managed delegate*unmanaged они вообще только для взаимодействия с с++ кодом используются? Или всю-равно?
    А не подскажете а есть ли способ сделать делегат функции без замыкания?
    В IL можно сделать! А можно ли сделать сразу?
    static unsafe F createUnsafe(ref MyStruct s1, int x)
        {    
         // почему нету такого типа
         // const int _x =x;
           F d = (ref MyStruct s) =>
            { 
                //x же константа, и никуда не убежит
                //s.x = _x;  // есть ли способы? 
              //   по факту сюда просто Il-команду Ldc.I4 n вставить надо  
            }; 
      return (d);  
        }

    Есть хитрые Unsafe методы, типа Unsafe.SkipInit(out this), которые позволяют вписать то что невозможно написать; Может есть что-то такое что туда прям вставит при компиляции, или при первом вызове метода.
    Написано
  • Почему gpu вычисления ILGPU медленнее в 10 раз чем CPU?

    @SergeySerge11 Автор вопроса
    Спс, я чет даже не подумал, сижу не понимаю в чем проблема. ( Постоянно такое бывает когда по фасту запустил чекнуть как оно там, и в итоге больше времени убил, чем по нормальному сделать)
    Написано
  • Почему gpu вычисления ILGPU медленнее в 10 раз чем CPU?

    @SergeySerge11 Автор вопроса
    обычно так и делаю, но я просто ХЗ как замерять, Подумал это будет нечестно относительно обычного метода.
    Написано
  • Откуда происходит затухание при моделировании падения частицы?

    @SergeySerge11 Автор вопроса
    да понял это сам, как-то дошло, хотя блин я знал это даже, но только сейчас дошло, где это применяется, странно что видел где-то 1000 таких кодов, еще 1000 видео коддеров с миллионами просмотров, и никто про это не сказал.
    Написано
  • Как вызвать функцию на представление с контроллера в mvc паттерне?

    @SergeySerge11 Автор вопроса
    Решил проблему прям идеально, но потом пришло осознание что так и работает INotifyPropertyChanged
    Решение создать класс(в идеале интерфейс), С делегатом, значение которого Должен будет установить объект привязки. Кстати уже 1000 раз сталкиваюсь с таким, Что Необходим Anti Private поля-свойства. Доступ к которым будет только из вне.
    public class UpdateCanvasListener
       { 
           public Action Update { get; private set; } 
           public EventHandler< SKPaintSurfaceEventArgs> PaintHandler;
           
           public UpdateCanvasListener(EventHandler<SKPaintSurfaceEventArgs> handler)
           { 
               PaintHandler = handler;
           }
       }
    
    class canvas{
      public readonly static DependencyProperty   SurfaceListenerProperty
     = DependencyProperty.Register(nameof(SurfaceListener), 
     typeof(UpdateCanvasListener), typeof(FieldCanvas), 
    new PropertyMetadata(null, new PropertyChangedCallback(initSurfacePaintCommand)));
    
            private static void initSurfacePaintCommand(DependencyObject d, DependencyPropertyChangedEventArgs e)
            {
                FieldCanvas obj = (FieldCanvas)d;
                
                var handlerOwner = e.NewValue as UpdateCanvasListener;
                
                obj.PaintSurface += handlerOwner?.PaintHandler;
                handlerOwner?.GetType().GetProperty("Update", System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Instance)?
                    .SetValue(handlerOwner, obj.InvalidateVisual }; 
                
            }
    
    }
    Написано
  • Откуда происходит затухание при моделировании падения частицы?

    @SergeySerge11 Автор вопроса
    Нет не поднимается, и не должен, хотя блин тысячь кодов с 10 млнов просмотров, там везде, такой код, И судя по тому что нагуглил так и должно быть, типа ошибка апроксимации. Как я поянсил, там шарик не долетает до точки экстремума, и это типа так и должно быть, из-за того что dt перескакивает..
    Там какие-то методы Рунге — Кутты и прочие страшилки.
    Написано
  • Как с помощью SIMD векторизации из массива float сделать bit массив знаковых битов?

    @SergeySerge11 Автор вопроса
    А ГДЕ SIMD векторизация, в биты не проблема сделать, , мне нужно решение задачи через нее, если это возможно, а скорей всего нет, но там столько методов, что вдруг найдется.
    К примеру 2 пример, работает в 5 раз быстрее, за счет избавления от if которые влекут промахи бренч предиктора.
    Написано
  • Масштабирование времени? Как рассчитать положение точки при ускорении времени?

    @SergeySerge11 Автор вопроса
    а вы знаете, вдруг случайно вспомнил факт из тонкой настройки вселенной, что типа гравитация в 4d работает по другому, значит и в 2d?
    Типа не GmM/R^2, а GmM/R общие уравнение, без квадрата, я облазил 10 исходников, и все используют школьную формулу.
    Типа все ошибаются, или типа нету разницы, для наблюдателя на плоскость проекции 3 измерений.
    Написано
  • Масштабирование времени? Как рассчитать положение точки при ускорении времени?

    @SergeySerge11 Автор вопроса
    hint000,
    Почему именно за 100 итераций? Для вычисления конечного значения итерации не нужны, и вы это понимаете, потому что сначала правильно пишите:

    потому что мне не надо вычислять конечное, так как это невозможно для задачи 3 тел. А итерационный метод, дает вот такую ошибку, если потом посмотреть через уравнение движения.
    Вот тут нашел 1 в 1 пример, при том даже числа те. https://habr.com/ru/articles/341986/
    Написано
  • Где ошибка, как из рекурсии цикл сделать?

    @SergeySerge11 Автор вопроса
    Там ошибка была в swap методе, и уже 2 раз за 2 года ее повторил, забыл помимо замены элементов, еще индексы обновить, для поддержки произвольного доступа по индексу.(хотя ее не забыл, но не так менял)
    Написано
  • Как заменить мышь, и установить чувствительность как было раньше?

    @SergeySerge11 Автор вопроса
    Сергей delphinpro, ответ еще лучше, покупай новую снова и снова
    Написано
  • Как в виртуальных процессорах устроена виртуальная память?

    @SergeySerge11 Автор вопроса
    понял пару разделов. Но вот все еще не могу понять. Как смотрю, что любой доступ к памяти, нужно в любом случае, обратится к tlb, в любом случае, это вызов функции с передачей параметров, и разбор адреса на n кусков, пара проверок.
    То есть каждую инструкцию mov ptr, будет делиться адрес на части, проверятся, склеиваться. и только потом выполнятся. В добавок нужно еще политику кеширования поддерживать.
    Что одну 1 ассемблерную превращает в 10-20 ассемблерных, даже при попадание.
    То есть к каждой инструкции обращения в память, будет вызваться метод трансляции?
    Или есть какие обходы, когда игнорится трансляция, как будто в реальном режиме.

    Или вот чтение инструкции из EIP, каждое чтение по адресу, прочесть инструкцию PC+1 будет перед тем как исполнить, на фазе извлечения опять это делать? ведь сама инструкция так же в виртуальной памяти, хотя инструкция в 1/4096 случая в той же странице памяти, делать вот эти проверки, потом еще в самой инструкции, если она работает с памятью, еще. (Надеюсь я что-то не улавливаю, но потом пойму).
  • Зачем нужно выравнивание больше чем двойное машинное слово? Директива p2align 4 и более?

    @SergeySerge11 Автор вопроса
    Спасибо, но я хотя бы догадался, с занулением младших битов. Раньше чет думал что выравнивание это только внутри структур и больше ни где
  • Какие части ПО могут быть общие у 2 операц. систем Wind-ы на 2 дисках разных? Лагает рабочий стол?

    @SergeySerge11 Автор вопроса
    Олег Милованов, а как так выходит, что такая проблемма на 2 разных дисках, со свежой windows 10? Видеодрайвер храниться где-то в пзу или на чипе видеокарты?