arma-thesis

git clone https://git.igankevich.com/arma-thesis.git
Log | Files | Refs | LICENSE

commit 1a7076fed6d216b820f9b65f4461ba3bc8d9a3f1
parent 0483c894c9e33571f6a463b7f36b1c3290bb6e6c
Author: Ivan Gankevich <igankevich@ya.ru>
Date:   Fri,  3 Nov 2017 16:36:53 +0300

Run through vim spell checker.

Diffstat:
arma-thesis-ru.org | 140++++++++++++++++++++++++++++++++++++++++----------------------------------------
arma-thesis.org | 20++++++++++----------
2 files changed, 80 insertions(+), 80 deletions(-)

diff --git a/arma-thesis-ru.org b/arma-thesis-ru.org @@ -17,7 +17,7 @@ платформу или другой морской объект, а также для оценки вероятности опрокидывания судна при заданных погодных условиях; однако, большинство из них используют линейную теорию для моделирования морского волнения\nbsp{}cite:shin2003nonlinear,van2007forensic,kat2001prediction,van2002development, в -рамках которой сложно воспроизвести определенные особенности ветроволнового +рамках которой сложно воспроизвести определенные особенности ветро-волнового климата. Среди них можно выделить переход от нормальных погодных условий к шторму и волнение, вызванное наложением множества систем ветровых волн и волн зыби, распространяющихся в нескольких направлениях. Другой недостаток линейной @@ -332,7 +332,7 @@ Motion Programme (LAMP), программе для моделирования к прогноз для низкочастотных волн зыби вплоть до двух типовых периодов волн. Это пример успешного применения модели процесса АР для моделирования морских волн. -** Основные формулы трехмерного процесса AРСС +** Основные формулы трехмерного процесса АРСС Модель АРСС для морского волнения определяет взволнованную морскую поверхность как трехмерный (два пространственных и одно временное измерение) процесс авторегрессии скользящего среднего: каждая точка взволнованной поверхности @@ -1693,17 +1693,16 @@ arma.plot_velocity( проведено два эксперимента: для стоячих и прогрессивных волн с АКФ, заданными формулами из разд.\nbsp{}[[#sec-wave-acfs]]. -Результаты экспериментов двояки: в то время как эксперимент показал, что -применение НБП с распределением РГШ увеличивает крутизну волн, то же самое -нельзя сказать об асимметричном нормальном распределении (рис.\nbsp{}[[fig-nit]]). -Использование этого распределения приводит к взволнованной поверхности, в -которой аппликаты всегда больше или равны нулю. Таким образом, асимметричное -нормальное распределение не подходит для НБП. НБП увеличивает высоту и крутизну -как прогрессивных, так и стоячих волн. Увеличение параметра либо асимметрии, -либо эксцесса РГШ приводит в увеличению как высоты, так и крутизны волн. Ошибка -аппроксимации АКФ (ур.\nbsp{}eqref:eq-nit-error) принимает значения от 0.20 для -РГШ до 0.70 для асимметричного нормального распределения -(табл.\nbsp{}[[tab-nit-error]]). +В то время как эксперимент показал, что применение НБП с распределением РГШ +увеличивает крутизну волн, то же самое нельзя сказать об асимметричном +нормальном распределении (рис.\nbsp{}[[fig-nit]]). Использование этого +распределения приводит к взволнованной поверхности, в которой аппликаты всегда +больше или равны нулю. Таким образом, асимметричное нормальное распределение не +подходит для НБП. НБП увеличивает высоту и крутизну как прогрессивных, так и +стоячих волн. Увеличение параметра либо асимметрии, либо эксцесса РГШ приводит +в увеличению как высоты, так и крутизны волн. Ошибка аппроксимации АКФ +(ур.\nbsp{}eqref:eq-nit-error) принимает значения от 0.20 для РГШ до 0.70 для +асимметричного нормального распределения (табл.\nbsp{}[[tab-nit-error]]). #+name: fig-nit #+header: :width 7 :height 7 @@ -1779,7 +1778,7 @@ arma.plot_nonlinear(file.path("build", "nit-standing"), args) по одному для каждой составляющей модели, которые сложнее, чем алгоритм для модели ЛХ. -Основная особенность формулы модели АР\nbsp{}--- авторегресиионные зависимости +Основная особенность формулы модели АР\nbsp{}--- авторегрессионные зависимости между точками взволнованной поверхности по каждому из измерений,\nbsp{}--- который препятствуют параллельному вычислению каждой точки поверхности. Вместо этого поверхность разделяется на равные части по каждому из измерений, и для @@ -1973,14 +1972,14 @@ MPP части, от которых зависит данная, должны б память с высокой пропускной способностью и большое количество модулей для операций с плавающей точкой, что является наименее благоприятным сценарием для модели АР. -- Формула модели АР не содержит транцендентных функций, которые могли бы +- Формула модели АР не содержит трансцендентных функций, которые могли бы компенсировать высокие задержки памяти, - в видеокарте присутствуют инструкции FMA, но они не увеличивают производительность из-за высоких задержек памяти, и - оптимальный обход многомерного массива не использовался ввиду отсутствия библиотек, реализующих его для видеокарты. Наконец, архитектура видеокарты не содержит примитивы синхронизации, позволяющих -эффективно реализовать авторегресиионные зависимости между отдельными частями +эффективно реализовать авторегрессионные зависимости между отдельными частями взволнованной поверхности; вместо этого отдельная подпрограмма OpenCL запускается для каждой части, а управление зависимостями между ними осуществляется на стороне центрального процессора. Таким образом, в случае @@ -3221,11 +3220,11 @@ IP-адреса: замена отображения IP-адресов на чт Понимание того, что кластер тоже является вычислительной машиной, позволяет реализовать промежуточное программное обеспечение, которое автоматически -распределяет роли руководителя и подчиненного и общим спопобом обрабатывает сбои +распределяет роли руководителя и подчиненного и общим способом обрабатывает сбои узлов. Это программное обеспечение предоставляет программный интерфейс и распределяет управляющие объекты между доступными на данный момент узлами. Используя этот интерфейс, можно написать программу, которая запускается на -кластерe, не зная точного количества работающих узлов. Это промежуточное +кластере, не зная точного количества работающих узлов. Это промежуточное программное обеспечение работает как кластерная операционная система в пользовательском пространстве, позволяющая писать и запускать распределенные приложения прозрачно. @@ -3234,7 +3233,7 @@ IP-адреса: замена отображения IP-адресов на чт Многие распределенные хранилища типа "ключ-значение" и параллельные файловые системы имеют симметричную архитектуру, в которой роли руководителя и подчиненного распределяются динамически, так что любой узел может выступать в -роли руководитля, если текущий руководящий узел выходит из +роли руководителя, если текущий руководящий узел выходит из строя\nbsp{}cite:ostrovsky2015couchbase,divya2013elasticsearch,boyer2012glusterfs,anderson2010couchdb,lakshman2010cassandra. Однако, такая архитектура до сих пор не используется в планировщиках задач обработки больших данных и высокопроизводительных вычислений. Например, в @@ -3253,7 +3252,7 @@ Zookeeper был бы лишним в данной конфигурации. Такая же проблема возникает в планировщиках задач для высокопроизводительных вычислений, руководящий узел (на котором запущен главный процесс планировщика задач) является единой точкой сбоя. -В\nbsp{}cite:uhlemann2006joshua,engelmann2006symmetric авторы реплицируют +В\nbsp{}cite:uhlemann2006joshua,engelmann2006symmetric авторы копируют состояние планировщика задач на резервный узел, чтобы обеспечить высокую доступность руководящего узла, но роль резервного узла задается статически. Такое решение близко к симметричной архитектуре, поскольку не использует внешний @@ -3265,10 +3264,10 @@ Zookeeper был бы лишним в данной конфигурации. Protocol)\nbsp{}cite:rfc2338,rfc3768,rfc5798. Несмотря на то что протокол VRRP предоставляет динамическое распределение ролей, он не может быть использован в планировщиках задач, поскольку спроектирован для маршрутизаторов, за которыми -стоят реверс прокси серверы. В таких серверах отсутствует состояние (очередь -задач), которое необходимо восстановить после выхода из строя узла, поэтому их -высокую доступность обеспечить проще. Это может быть реализовано даже без -маршрутизаторов, используя вместо этого сервис +стоят инвертированные прокси-серверы. В таких серверах отсутствует состояние +(очередь задач), которое необходимо восстановить после выхода из строя узла, +поэтому их высокую доступность обеспечить проще. Это может быть реализовано +даже без маршрутизаторов, используя вместо этого сервис Keepalived\nbsp{}cite:cassen2002keepalived. Симметричная архитектура выгодна для планировщиков задач, поскольку позволяет @@ -3278,26 +3277,26 @@ Keepalived\nbsp{}cite:cassen2002keepalived. В последующих разделах будут описаны компоненты необходимые для написания параллельной программы и планировщика, которые устойчивы к сбоям узлов кластера. -**** Определения иерархий. -Для устранения неоднозначности иерархических связей между сервисами и -управляющими объектами и для того чтобы упростить изложение, мы будем -использовать в тексте следующие условные обозначения. Если связь установлена -между двумя процессами-сервисами, то отношения обозначаются -/руководитель-подчиненный/. Если связь установлена между двумя управляющими -объектами, то отношения обозначаются либо /руководитель-подчиненный/, либо -/родитель-потомок/. Две иерархии ортогональны друг к другу в том смысле, что ни -один управляющий объект не может иметь связь с сервисом, и наоборот. Поскольку -иерархия сервисом используется для распределения нагрузки на узлы кластера, -иерархия управляющих объектов отображается на нее, и это отображение может быть -произвольным: обычна ситуация, когда руководящий управляющий объект находится на -подчиненном узле, а его подчиненные управляющие объекта распределены равномерно -между всеми узлами кластера (включая узел, где находится руководящий объект). -Обе иерархии может быть сколь угодно глубокими, но "неглубокие" являются -предпочтительными для высоко параллельных программ, так как в них меньше -количество промежуточных узлов, через которые должны пройти управляющие объекты -при распределении между узлами кластера. Поскольку существует однозначное -соответствие между сервисами и узлами кластера, в данной работе они используются -как взаимозаменяемые термины. +**** Определения иерархий. Для устранения неоднозначности иерархических связей +между резидентными процессами и управляющими объектами и для того чтобы +упростить изложение, мы будем использовать в тексте следующие условные +обозначения. Если связь установлена между двумя резидентными процессами, то +отношения обозначаются /руководитель-подчиненный/. Если связь установлена между +двумя управляющими объектами, то отношения обозначаются либо +/руководитель-подчиненный/, либо /родитель-потомок/. Две иерархии ортогональны +друг к другу в том смысле, что ни один управляющий объект не может иметь связь +с сервисом, и наоборот. Поскольку иерархия сервисом используется для +распределения нагрузки на узлы кластера, иерархия управляющих объектов +отображается на нее, и это отображение может быть произвольным: обычна +ситуация, когда руководящий управляющий объект находится на подчиненном узле, а +его подчиненные управляющие объекта распределены равномерно между всеми узлами +кластера (включая узел, где находится руководящий объект). Обе иерархии может +быть сколь угодно глубокими, но "неглубокие" являются предпочтительными для +высоко параллельных программ, так как в них меньше количество промежуточных +узлов, через которые должны пройти управляющие объекты при распределении между +узлами кластера. Поскольку существует однозначное соответствие между +резидентными процессами и узлами кластера, в данной работе они используются как +взаимозаменяемые термины. **** Обработка выхода узлов из строя. Основной стратегией при выходе из строя подчиненного узла является перезапуск @@ -3344,7 +3343,7 @@ Keepalived\nbsp{}cite:cassen2002keepalived. - использует для сохранения состояния оперативную память другого узла кластера, а не дисковое хранилище. Этот подход позволяет выдержать выход из строя не более одного /любого/ узла -кластера за один шаг вычислений или произвольного количества подчинненых узлов в +кластера за один шаг вычислений или произвольного количества подчиненных узлов в любой момент работы программы. Далее следует пример работы алгоритма восстановления после сбоев @@ -3354,13 +3353,13 @@ Keepalived\nbsp{}cite:cassen2002keepalived. связность узлов кластера и лучше всего работает с древовидными топологиями, в которых все узлы кластера соединены несколькими коммутаторами. 2. Построение иерархии узлов. При первичной загрузке на всех узлах кластера - запускаются процессы-сервисы, которые совместно строят иерархию таких же + запускаются резидентные процессы, которые совместно строят иерархию таких же процессов поверх топологии сети кластера. Положение процесса-сервиса в иерархии определяется позицией IP-адреса его узла в диапазоне IP-адресов - сети. Для установления связи каждый из процессов соединеняется только с + сети. Для установления связи каждый из процессов соединяется только с предполагаемым руководящим процессом. В данном случае процесс на узле \(A\) становится руководящим процессом для всех остальных. Иерархия может - измениться, только если новый узел присоденяется к кластеру или какой-либо из + измениться, только если новый узел присоединяется к кластеру или какой-либо из узлов выходит из строя. 3. Запуск главного управляющего объекта. Первый управляющий объект запускается на одном из подчиненных узлов (узел \(B\)). Главный объект может иметь только @@ -3369,7 +3368,7 @@ Keepalived\nbsp{}cite:cassen2002keepalived. \(A\). \(T_1\) представляет собой последовательный шаг программы. В программе может быть произвольное количество последовательных шагов, и, когда узел \(A\) выходит из строя, текущий шаг перезапускается с начала. -4. Запуск подчиненных управляющих объектов. Управлящие объекты \(S_1\), \(S_2\), +4. Запуск подчиненных управляющих объектов. Управляющие объекты \(S_1\), \(S_2\), \(S_3\) запускаются на подчиненных узлах кластера. Когда узел \(B\), \(C\) или \(D\), соответствующий руководящий управляющий объект перезапускает завершившиеся некорректно подчиненные объекты (\(T_1\) перезапускает \(S_1\), @@ -3428,7 +3427,7 @@ Keepalived\nbsp{}cite:cassen2002keepalived. - выход из строя главного узла (на котором запускается главный объект), - выход из строя подчиненного узла (на который копируется главный объект программы). -Только два напрямую соеденных узла кластера были использованы в тесте. Выход из +Только два напрямую соединенных узла кластера были использованы в тесте. Выход из строя узла имитировался путем отправки сигнала ~SIGKILL~ резидентному процессу на соответствующем узле, сразу после того как копия главного объекта создана. Приложение сразу обнаруживало выход из строя узла, поскольку соответствующее @@ -3478,7 +3477,7 @@ digraph { Обнаружение выхода из строя подчиненного узла требует некоторого времени: это происходит, только когда подчиненный объект, переносящий копию главного, заканчивает выполнение и пытается добраться до родительского объекта. -Мгоновенное обнаружение требует принудительной остановки подчиненного объекта, +Мгновенное обнаружение требует принудительной остановки подчиненного объекта, что может быть неприменимо для программ со сложной логикой. #+name: fig-master-slave-failure @@ -3616,7 +3615,7 @@ title(xlab="Размер взволнованной поверхности", yla кластере. В данном разделе обсуждаются преимущества и недостатки этого подхода. -В сравнении с портируемыми системами пакетных заданий (PBS) для распределения +В сравнении с переносимыми системами пакетных заданий (PBS) для распределения нагрузки на узлы кластера предлагаемый подход использует легковесные управляющие объекты вместо тяжеловесных параллельных задач. Во-первых, это позволяет иметь очереди объектов на каждом узле, вместо того чтобы иметь одну очередь задач на @@ -3634,7 +3633,7 @@ title(xlab="Размер взволнованной поверхности", yla взаимозаменяемыми, что необходимо для обеспечения отказоустойчивости. Таким образом, одновременное выполнение нескольких параллельных программ на одном и том же множестве узлов может увеличить пропускную способность кластера, но также -может уменьшить их производительность, взятую по отдельности, а динамичское +может уменьшить их производительность, взятую по отдельности, а динамическое распределение ролей является основанием, на котором строится устойчивость к сбоям. @@ -3642,9 +3641,9 @@ title(xlab="Размер взволнованной поверхности", yla подход использует легковесные управляющие объекты вместо тяжеловесных процессов. Во-первых, это позволяет определить число обрабатываемых параллельно сущностей, исходя из задачи, а не архитектуры компьютера или кластера. Это поощряет -программиста создачать столько объектов, солько необходимо, руководствуясь +программиста создавать столько объектов, сколько необходимо, руководствуясь алгоритмом или ограничениями на размер структур данных из предметной области -задачи. В программе моделирования морского волннения минимальный размер каждой +задачи. В программе моделирования морского волнения минимальный размер каждой части поверхности зависит от числа коэффициентов вдоль каждой из осей, и, в то же время, количество частей должно быть больше, чем количество процессоров, для того чтобы сделать нагрузку на процессоры более равномерной. Учитывая эти @@ -3653,12 +3652,12 @@ title(xlab="Размер взволнованной поверхности", yla является то, что, чем больше управляющих объектов в программе, тем больше общих структур данных копируется на один и тот же узел вместе с подчиненными объектами; проблема решается введением промежуточного слоя объектов, что в свою -очередь влечет увеличивает сложноть программы. Во-вторых, иерархия управляющих -объектов совместно с иерархией узлов позволяет автоматически пересчитвать -завершившиеся некорретно подчиненные объекты на выживших узлах кластера в случае +очередь влечет увеличивает сложность программы. Во-вторых, иерархия управляющих +объектов совместно с иерархией узлов позволяет автоматически пересчитывать +завершившиеся некорректно подчиненные объекты на выживших узлах кластера в случае выхода из строя оборудования. Это возможно, поскольку ход выполнения программы сохраняется в каждом объекте, а не в глобальных переменных, как это делается в -программах MPI. Дублируя состояние на подчиненные узлы, система пресчитывает +программах MPI. Дублируя состояние на подчиненные узлы, система пересчитывает только объекты из поврежденных процессов, а не программу целиком. Таким образом, переход от процессов к управляющим объектам может увеличить производительность параллельной программы путем динамической балансировки нагрузки, но также может @@ -3669,8 +3668,8 @@ title(xlab="Размер взволнованной поверхности", yla управляющие объекты, конвейеры и иерархии\nbsp{}--- ортогональны, но, на самом деле, они дополняют друг друга. Если бы управляющие объекты не содержали в себе состояние хода выполнения программы, то было бы невозможно пересчитать -завершившиеся некорретно подчиненные объекты и обеспечить отказоустойчивость. -Если бы ирерархии узлов не было, то было бы невозможно распределить нагрузку +завершившиеся некорректно подчиненные объекты и обеспечить отказоустойчивость. +Если бы иерархии узлов не было, то было бы невозможно распределить нагрузку между узлами кластера, поскольку все узлы одинаковы без иерархии. Если бы для каждого устройства не было конвейера, то было бы невозможно обрабатывать управляющие объекты асинхронно и реализовать динамическую балансировку нагрузки. @@ -3708,17 +3707,17 @@ title(xlab="Размер взволнованной поверхности", yla динамически создает задачи для каждой части взволнованной поверхности, принимая во внимание авторегрессионные зависимости между точками, и отправляет их на подчиненные узлы, а ведомые вычисляют каждую часть взволнованной поверхности и -отпавляют ее обратно ведущему. +отправляют ее обратно ведущему. В реализации для систем с распределенной памятью каждая задача моделируется управляющим объектом: существует руководящий объект, создающий подчиненные при -необходимости, и подчиненные объекты, генеруриющие части взолнованной +необходимости, и подчиненные объекты, генерирующие части взволнованной поверхности. В методе ~act~ главного объекта создается подчиненный объект для первой части\nbsp{}--- части, которая не зависит ни от каких других точек. Когда этот объект возвращается, руководящий объект в методе ~react~ определяет, какие части могут быть вычислены сейчас, создает подчиненный объект для каждой части и отправляет его на конвейер. В методе ~act~ подчиненного объекта генерируется -часть взолнованной поверхности, а затем объект отправляет самого себя +часть взволнованной поверхности, а затем объект отправляет самого себя руководителю. Метод ~react~ подчиненного объекта пустой. Реализация распределенного алгоритма АР имеет ряд преимуществ по сравнению с @@ -3739,7 +3738,7 @@ Ant (таб.\nbsp{}[[tab-ant]]). Для увеличения пропускно были соединены друг с другом напрямую, а максимальный размер единицы передаваемых данных (MTU) установлен в 9200 байт. Рассматривались два случая: с одним резидентным процессом Bscheduler, запущенным на локальном узле, и с двумя -резидентными процесами, запущенными на каждом узле. Производительность программы +резидентными процессами, запущенными на каждом узле. Производительность программы сравнивалась с производительностью версии на OpenMP, запускаемой на одном узле. Bscheduler превосходит OpenMP как на одном, так и на двух узлах @@ -3752,7 +3751,7 @@ Bscheduler превосходит OpenMP как на одном, так и на версии программы для Bscheduler, поскольку сканирование очереди задач не может быть эффективно реализовано в рамках этого планировщика. В случае двух узлов более высокая производительность объясняется большим суммарным количеством -процессорных ядер (16), высокой пропусной способностью прямого сетевого +процессорных ядер (16), высокой пропускной способностью прямого сетевого соединения. Таким образом, реализация распределенного алгоритма модели АР на Bscheduler быстрее на системе с общей памятью ввиду более эффективной обработки авторегрессионных зависимостей, и его производительность масштабируется на @@ -3798,7 +3797,7 @@ title(xlab="Размер взволнованной поверхности", yla - Модель и метод были реализована для систем как с общей, так и с распределенной памятью, и в нескольких тестах показали масштабируемость на различном количество ядер, которая близка к линейной. Модель АР более эффективна с - вычислительной точки зрения на центральном процессоре, нежели на ведиокарте, и + вычислительной точки зрения на центральном процессоре, нежели на видеокарте, и превосходит по производительности модель ЛХ. **** Перспективы дальнейших исследований. @@ -3809,7 +3808,7 @@ title(xlab="Размер взволнованной поверхности", yla * Выводы Результаты исследования позволяют сделать вывод о том, что задача вычисления -давлений под реальной морской поверхностью может быть решена аналитическив, +давлений под реальной морской поверхностью может быть решена аналитически, минуя предположения линейной теории волн и теории волн малой амплитуды. Это решение в паре с моделью АРСС морского волнения, способной генерировать волны произвольных амплитуд, может быть использовано для расчета @@ -3823,7 +3822,7 @@ title(xlab="Размер взволнованной поверхности", yla проводиться. Разработанный в работе математический аппарат и его численная реализация могут -стать основой виртуального полигона, предназанченного для расчетов динамики +стать основой виртуального полигона, предназначенного для расчетов динамики морских объектов. * Благодарности @@ -3856,7 +3855,8 @@ Emacs, предоставляющего вычислительное окруж - <<<АРСС>>> :: процесс авторегрессии скользящего среднего. - <<<СС>>> :: процесс скользящего среднего. - <<<ЛХ>>> :: модель Лонге---Хиггинса. -- <<<LAMP>>> :: Large Amplitude Motion Programme, программа для моделирования качки судна на морских волнах. +- <<<LAMP>>> :: Large Amplitude Motion Programme, программа для моделирования +качки судна на морских волнах. - <<<ЦПТ>>> :: центральная предельная теорема. - <<<ПМ>>> :: аппроксимация Пирсона---Московица для спектра морского волнения. - <<<ЮУ>>> :: система уравнений Юла---Уокера. diff --git a/arma-thesis.org b/arma-thesis.org @@ -1639,16 +1639,16 @@ model produce the same values for each realisation. There we two experiments: for standing and propagating waves with ACFs given by formulae from section\nbsp{}[[#sec-wave-acfs]]. -The results of the experiments are twofold: while the experiment showed that -applying NIT with GCS-based distribution increases wave steepness, the same is -not true for skew normal distribution (fig.\nbsp{}[[fig-nit]]). Using this -distribution results in wavy surface each \(z\)-coordinate of which is always -greater or equal to nought. So, skew normal distribution is unsuitable for NIT. -NIT increases the wave height and steepness of both standing and propagating -waves. Increasing either skewness or kurtosis parameter of GCS-based -distribution increases both wave height and steepness. The error of ACF -approximation (eq.\nbsp{}eqref:eq-nit-error) ranges from 0.20 for GCS-based -distribution to 0.70 for skew normal distribution (table\nbsp{}[[tab-nit-error]]). +While the experiment showed that applying NIT with GCS-based distribution +increases wave steepness, the same is not true for skew normal distribution +(fig.\nbsp{}[[fig-nit]]). Using this distribution results in wavy surface each +\(z\)-coordinate of which is always greater or equal to nought. So, skew normal +distribution is unsuitable for NIT. NIT increases the wave height and +steepness of both standing and propagating waves. Increasing either skewness or +kurtosis parameter of GCS-based distribution increases both wave height and +steepness. The error of ACF approximation (eq.\nbsp{}eqref:eq-nit-error) ranges +from 0.20 for GCS-based distribution to 0.70 for skew normal distribution +(table\nbsp{}[[tab-nit-error]]). #+name: fig-nit #+header: :width 7 :height 7