'프로그램 사용'에 해당되는 글 2276건

  1. 2023.09.04 linux cooked capture
  2. 2023.09.01 mpirun illegal instruction
  3. 2023.08.31 freecad 첫 드로잉 2
  4. 2023.08.29 bitbake --help
  5. 2023.08.28 Do not use Bitbake as root.
  6. 2023.08.28 imx8 yocto
  7. 2023.08.28 makefile 매크로(?)
  8. 2023.08.16 make 조건식
  9. 2023.08.08 gcc cortex-a9 double형 neon 연산 가속 3
  10. 2023.08.05 libreoffice calc 중복제거

wireshark 에서 any 인터페이스로 잡으면 

linux cooked capture 라는 희한한(?) 레이어가 생긴다.

물론 wlo나 eth 와 같이 인터페이스를 지정하면 Ethernet II 이런식으로 뜬다.

 

[링크 : https://byeo.tistory.com/entry/Linux-Cooked-Capture-SLL-protocol]

Posted by 구차니

엥... 

라즈베리 파이 3B 64bit OS 에서는 잘 실행되는데

pi@raspberrypi:~ $ mpirun
--------------------------------------------------------------------------
mpirun could not find anything to do.

It is possible that you forgot to specify how many processes to run
via the "-np" argument.
--------------------------------------------------------------------------

pi@raspberrypi:~ $ mpirun --version
mpirun (Open MPI) 4.1.0

Report bugs to http://www.open-mpi.org/community/help/

 

odroid c2 에서는(aarch64) 에러가 난다

$ mpirun
Illegal instruction

$ mpirun --help
Illegal instruction

$ mpirun --version
mpirun (Open MPI) 4.0.3

Report bugs to http://www.open-mpi.org/community/help/

 

strace라던가 써서 추적해보려는데 패키지가 되먹질 않으니 짜증나네 -_ㅠ

 

odroid c2

geteuid()                               = 1000
openat(AT_FDCWD, "/proc/cpuinfo", O_RDONLY) = 3
--- SIGILL {si_signo=SIGILL, si_code=ILL_ILLOPC, si_addr=0x7fa18b7cfc} ---
+++ killed by SIGILL +++
Illegal instruction

 

라즈베리 파이

geteuid()                               = 1000
openat(AT_FDCWD, "/proc/cpuinfo", O_RDONLY) = 3
close(3)                                = 0
getuid()                                = 1000
geteuid()                               = 1000

 

도대체 고작 /proc/cpuinfo 여는걸로 죽다니 머지?

 

+

gdb로 해보니 뜬금없이 libopen-pal.so.40 에서 죽는다. 도대체 PAL 이 멀하는데 illegal instruction 을 띄울 작업을 하는거지?

$ gdb mpirun
GNU gdb (Ubuntu 9.2-0ubuntu1~20.04.1) 9.2
Copyright (C) 2020 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
Type "show copying" and "show warranty" for details.
This GDB was configured as "aarch64-linux-gnu".
Type "show configuration" for configuration details.
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>.
Find the GDB manual and other documentation resources online at:
    <http://www.gnu.org/software/gdb/documentation/>.

For help, type "help".
Type "apropos word" to search for commands related to "word"...
Reading symbols from mpirun...
(No debugging symbols found in mpirun)
(gdb) r
Starting program: /usr/bin/mpirun 
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/aarch64-linux-gnu/libthread_db.so.1".

Program received signal SIGILL, Illegal instruction.
0x0000007fb7ec5cfc in ?? () from /usr/lib/aarch64-linux-gnu/libopen-pal.so.40

 

눈이 이상해졌나 open-pam 인 줄.. -_-

아무튼 libopen-pal 혹은 OPAL  이라는 녀석이 현재 문제인데

openmpi는 liboshmem(shared memory 관리?) libmpi 그리고 libopen-pal로 구성된다고 한다.

That is, they are compiled into separate libraries: liboshmem, libmpi, libopen-pal with a strict dependency order: OSHMEM depends on OMPI, OMPI depends on OPAL.

[링크:  https://docs.open-mpi.org/en/v5.0.x/developers/terminology.html]

 

open PAL은 체크포인트 와 프로그램 재시작을 할 수 있도록 해주는 녀석이니..

프로세서에 대해서 잘 알아야 프로그램을 멈추고 실행하게 할테니..

반대로 생각하면 odroid-c2에서 적용된 aarch64 버전이 amlogic 기반의 ap와는 맞지 않게 빌드된걸려나?

Open PAL can involuntarily checkpoint and restart sequential programs. Doing so requires that Open PAL was compiled with thread support and that the back-end checkpointing systems are available at run-time.

[링크 : https://www.open-mpi.org/doc/v4.1/man7/opal_crs.7.php]

 

+

odroid c2 에서 make -j4 로 openmpi-4.1.0 빌드에 걸린시간

중간에 gdb 설치한다고 순수하게 돌리면 24분쯤으로 되지 않았을까?

real 25m20.199s
user 52m9.680s
sys 5m27.920s

 

 

+

빡세게(?) 빌드까지 해서 겨우겨우 돌렸는데 왜 저런 에러가 또 나냐고 ㅠㅠ

Program received signal SIGILL, Illegal instruction.
0x0000007fb7ec236c in opal_timer_linux_find_freq ()
   from /usr/local/lib/libopen-pal.so.40

 

에러를 보니 먼가 함수명이 나와서 추적

$ grep -rn "opal_timer_linux_find_freq" .
Binary file ./opal/mca/timer/linux/.libs/timer_linux_component.o matches
Binary file ./opal/mca/timer/linux/.libs/libmca_timer_linux.a matches
./opal/mca/timer/linux/timer_linux_component.c:105:static int opal_timer_linux_find_freq(void)
./opal/mca/timer/linux/timer_linux_component.c:203:    ret = opal_timer_linux_find_freq();

$ cat opal/mca/timer/linux/timer_linux_component.c
static int opal_timer_linux_find_freq(void)
{
    FILE *fp;
    char *loc;
    float cpu_f;
    int ret;
    char buf[1024];

    fp = fopen("/proc/cpuinfo", "r");
    if (NULL == fp) {
        return OPAL_ERR_IN_ERRNO;
    }

    opal_timer_linux_freq = 0;

#if OPAL_ASSEMBLY_ARCH == OPAL_ARM64
        opal_timer_linux_freq = opal_sys_timer_freq();
#endif


$ grep -rni "opal_sys_timer_freq" .
./mca/timer/linux/timer_linux_component.c:121: opal_timer_linux_freq = opal_sys_timer_freq();
./include/opal/sys/arm64/timer.h:36:opal_sys_timer_freq(void)

$ cat openmpi-4.1.0/opal/include/opal/sys/arm64/timer.h
static inline opal_timer_t
opal_sys_timer_freq(void)
{
    opal_timer_t freq;
    __asm__ __volatile__ ("mrs %0,  CNTFRQ_EL0" : "=r" (freq));
    return (opal_timer_t)(freq);
}

 

레지스터 이름부터가 무시무시하네?

MRS
Move System Register.

Syntax
MRS Xt, (systemreg|Sop0_op1_Cn_Cm_op2)

Where:

Xt
Is the 64-bit name of the general-purpose destination register.
systemreg
Is a System register name.

The System register names are defined in 'AArch64 System Registers' in the System Register XML.

op0
Is an unsigned immediate, and can be either 2 or 3.
op1
Is a 3-bit unsigned immediate, in the range 0 to 7.
Cn
Is a name Cn, with n in the range 0 to 15.
Cm
Is a name Cm, with m in the range 0 to 15.
op2
Is a 3-bit unsigned immediate, in the range 0 to 7.
Usage
Move System Register allows the PE to read an AArch64 System register into a general-purpose register.

[링크 : https://developer.arm.com/documentation/dui0801/h/A64-General-Instructions/MRS]

 

Accessing CNTFRQ_EL0
Accesses to this register use the following encodings in the System register encoding space:

MRS <Xt>, CNTFRQ_EL0
op0

[링크 : https://developer.arm.com/documentation/ddi0601/2022-03/AArch64-Registers/CNTFRQ-EL0--Counter-timer-Frequency-register]

 

The two instructions you show above are therefore -

MSR HPFAR_EL2, X0

MSR PSTATEField_SP, #0

[링크 : https://reverseengineering.stackexchange.com/questions/14617/arm-understanding-msr-mrs-instructions]

 

보면.. uboot에도 있는 아주 평범한(?) 녀석인데.. 머지?

unsigned long timer_read_counter(void)
{
unsigned long cntpct;
unsigned long temp;

isb();
asm volatile("mrs %0, cntpct_el0" : "=r" (cntpct));
asm volatile("mrs %0, cntpct_el0" : "=r" (temp));
while (temp != cntpct) {
asm volatile("mrs %0, cntpct_el0" : "=r" (cntpct));
asm volatile("mrs %0, cntpct_el0" : "=r" (temp));
}

return cntpct;
}

[링크 : https://github.com/qemu/u-boot/blob/master/arch/arm/cpu/armv8/generic_timer.c]

 

%0은 이전의 dst 를 의미하는걸려나?

int val = 50;
__asm volatile ("MOV R0, %0":  : "r"(var) );

==> (컴파일러 해석) 

ldr r3, [r7, #4]

mov r0, r3

[링크 : https://dhpark1212.tistory.com/entry/ARM-GCC-Inline-assembly-coding]

 

amlogic 의 Cortex-A53인데 많이 다른가?

ODROID-C2 ODROID-C1+ RPi 3 Model B
CPU
Amlogic S905 SoC
4 x ARM Cortex-A53 1.5GHz
64bit ARMv8 Architecture @28nm
Amlogic S805 SoC
4 x ARM Cortex-A5 1.5GHz
32bit ARMv7 Architecture @28nm
Broadcom BCM2837
4 x ARM Cortex-A53 1.2Ghz
64bit ARMv7 Architecture @40nm

[링크 : https://www.hardkernel.com/ko/shop/odroid-c2/]

'프로그램 사용 > openFOAM' 카테고리의 다른 글

openFOAM + freecad + salome  (0) 2023.06.07
openFOAM tutorial with youtube  (0) 2023.05.24
openfoam on ubuntu  (0) 2023.05.24
openFOAM tutorial  (4) 2023.05.24
openfoam7 on ubuntu 18.04  (0) 2020.08.09
Posted by 구차니
프로그램 사용/freecad2023. 8. 31. 11:05

freecad 에서 도면을 그리려면 먼가 어렵다?

상단의 툴바에서 누르던가 아니면

보기 - 워크벤치 - Draft 혹은 Part Design을 누르면 되는 것 같은데

 

Draft를 누르면 아래와 같이 격자종이가 나오고

 

part Design을 누르면 그냥 빈화면만 나온다.

[링크 : https://commox111.tistory.com/65]

 

part design 에서 점이나 선을 그리려면 활성바디가 없다고 에러가 나는데

좌측에 생성 : 바디(body) 누르면 어떻게 시작은 가능한 듯.

[링크 : https://www.youtube.com/watch?v=x53Jbr16ekI]

 

아무튼 draft 에서 대충대충 선을 그리고

modification - array tools - circular array로 대충 베어링은 그려볼 수 있을 듯.

'프로그램 사용 > freecad' 카테고리의 다른 글

CSG(Constructive solid geometry) freecad  (0) 2024.08.30
freecad 사용법 다시..  (2) 2024.08.29
freeCAD 는 ubuntu24.04에서 사라졌나?  (0) 2024.08.29
ubuntu용 cad 프로그램  (0) 2020.09.23
freecad 설명  (0) 2018.01.22
Posted by 구차니

명령어 조사중

bitbake -c compile -f recipe 식으로 많이 써왔는데

상세 명령이나 recipre 목록등을 얻는 방법을 찾는 중

 

Usage: bitbake [options] [recipename/target recipe:do_task ...]

    Executes the specified task (default is 'build') for a given set of target recipes (.bb files).
    It is assumed there is a conf/bblayers.conf available in cwd or in BBPATH which
    will provide the layer, BBFILES and other configuration information.

Options:
  --version             show program's version number and exit
  -h, --help            show this help message and exit
  -b BUILDFILE, --buildfile=BUILDFILE
                        Execute tasks from a specific .bb recipe directly.
                        WARNING: Does not handle any dependencies from other
                        recipes.
  -k, --continue        Continue as much as possible after an error. While the
                        target that failed and anything depending on it cannot
                        be built, as much as possible will be built before
                        stopping.
  -f, --force           Force the specified targets/task to run (invalidating any existing stamp file).
  -c CMD, --cmd=CMD     Specify the task to execute. The exact options
                        available depend on the metadata. Some examples might
                        be 'compile' or 'populate_sysroot' or 'listtasks' may
                        give a list of the tasks available.
  -C INVALIDATE_STAMP, --clear-stamp=INVALIDATE_STAMP
                        Invalidate the stamp for the specified task such as
                        'compile' and then run the default task for the
                        specified target(s).
  -r PREFILE, --read=PREFILE
                        Read the specified file before bitbake.conf.
  -R POSTFILE, --postread=POSTFILE
                        Read the specified file after bitbake.conf.
  -v, --verbose         Enable tracing of shell tasks (with 'set -x'). Also
                        print bb.note(...) messages to stdout (in addition to
                        writing them to ${T}/log.do_<task>).
  -D, --debug           Increase the debug level. You can specify this more
                        than once. -D sets the debug level to 1, where only
                        bb.debug(1, ...) messages are printed to stdout; -DD
                        sets the debug level to 2, where both bb.debug(1, ...)
                        and bb.debug(2, ...) messages are printed; etc.
                        Without -D, no debug messages are printed. Note that
                        -D only affects output to stdout. All debug messages
                        are written to ${T}/log.do_taskname, regardless of the
                        debug level.
  -q, --quiet           Output less log message data to the terminal. You can
                        specify this more than once.
  -n, --dry-run         Don't execute, just go through the motions.
  -S SIGNATURE_HANDLER, --dump-signatures=SIGNATURE_HANDLER
                        Dump out the signature construction information, with
                        no task execution. The SIGNATURE_HANDLER parameter is
                        passed to the handler. Two common values are none and
                        printdiff but the handler may define more/less. none
                        means only dump the signature, printdiff means compare
                        the dumped signature with the cached one.
  -p, --parse-only      Quit after parsing the BB recipes.
  -s, --show-versions   Show current and preferred versions of all recipes.
  -e, --environment     Show the global or per-recipe environment complete
                        with information about where variables were
                        set/changed.
  -g, --graphviz        Save dependency tree information for the specified
                        targets in the dot syntax.
  -I EXTRA_ASSUME_PROVIDED, --ignore-deps=EXTRA_ASSUME_PROVIDED
                        Assume these dependencies don't exist and are already
                        provided (equivalent to ASSUME_PROVIDED). Useful to
                        make dependency graphs more appealing
  -l DEBUG_DOMAINS, --log-domains=DEBUG_DOMAINS
                        Show debug logging for the specified logging domains
  -P, --profile         Profile the command and save reports.
  -u UI, --ui=UI        The user interface to use (knotty, ncurses or teamcity
                        - default knotty).
  --token=XMLRPCTOKEN   Specify the connection token to be used when
                        connecting to a remote server.
  --revisions-changed   Set the exit code depending on whether upstream
                        floating revisions have changed or not.
  --server-only         Run bitbake without a UI, only starting a server
                        (cooker) process.
  -B BIND, --bind=BIND  The name/address for the bitbake xmlrpc server to bind
                        to.
  -T SERVER_TIMEOUT, --idle-timeout=SERVER_TIMEOUT
                        Set timeout to unload bitbake server due to
                        inactivity, set to -1 means no unload, default:
                        Environment variable BB_SERVER_TIMEOUT.
  --no-setscene         Do not run any setscene tasks. sstate will be ignored
                        and everything needed, built.
  --skip-setscene       Skip setscene tasks if they would be executed. Tasks
                        previously restored from sstate will be kept, unlike
                        --no-setscene
  --setscene-only       Only run setscene tasks, don't run any real tasks.
  --remote-server=REMOTE_SERVER
                        Connect to the specified server.
  -m, --kill-server     Terminate any running bitbake server.
  --observe-only        Connect to a server as an observing-only client.
  --status-only         Check the status of the remote bitbake server.
  -w WRITEEVENTLOG, --write-log=WRITEEVENTLOG
                        Writes the event log of the build to a bitbake event
                        json file. Use '' (empty string) to assign the name
                        automatically.
  --runall=RUNALL       Run the specified task for any recipe in the taskgraph
                        of the specified target (even if it wouldn't otherwise
                        have run).
  --runonly=RUNONLY     Run only the specified task within the taskgraph of
                        the specified targets (and any task dependencies those
                        tasks may have).

 

$ bitbake -c listtasks
Nothing to do.  Use 'bitbake world' to build everything, or run 'bitbake --help' for usage information.

 

$ bitbake-layers show-recipes

[링크 : https://stackoverflow.com/questions/32850160/bitbake-how-to-list-all-recipe-and-append-files-used-in-an-image]

 

For an updated list for a specific recipe, run:

bitbake -c listtasks <recipe>

fetchall Fetch all source
build
devshell
package_write_ipk
cleansstate Clean the build/sstate-cache directory
configure
clean clean $WORKDIR
cleanall clean $WORKDIR and sstate-cache
populate_lic
package_write
populate_sysroot
buildall
populate_lic_setscene
patch
listtasks list all tasks that can be run for a target
compile
package_setscene
fetch
checkuri
package_write_ipk_setscene
package
unpack
install
populate_sysroot_setscene
checkuriall

[링크 : https://www.openembedded.org/wiki/List_of_Executable_tasks]

'프로그램 사용 > yocto project' 카테고리의 다른 글

yocto build on i5-3570  (0) 2023.09.07
Do not use Bitbake as root.  (0) 2023.08.28
imx8 yocto  (0) 2023.08.28
imx8 yocto build on ubuntu 22.04  (0) 2023.02.10
라즈베리 파이 with yocto project  (2) 2015.07.30
Posted by 구차니

bitbake로 yocto를 빌드 하려고 하는데 에러가 나서 찾아보니

메시지 자체는 root로 bitbake 하지 말란건데, 설정상으로는 sanity를 inherit 하지 않도록 하면 되는 듯.

 

분별을(제정신을) 상속 안받으면 제정신이 아니게 되는건가...(!)

sanity 미국∙영국 [ˈsænəti]  영국식 1. [명사] 온전한 정신 (상태)
2. [명사] 분별 (→sane), (↔insanity)

 

# Sanity checks for common user misconfigurations
#
# See sanity.bbclass
#
# Expert users can confirm their sanity with "touch conf/sanity.conf"
BB_MIN_VERSION = "1.49.2"

SANITY_ABIFILE = "${TMPDIR}/abi_version"

SANITY_VERSION ?= "1"
LOCALCONF_VERSION  ?= "1"
LAYER_CONF_VERSION ?= "7"
SITE_CONF_VERSION  ?= "1"

#INHERIT += "sanity"

[링크 : http://./sources/poky/meta/conf/sanity.conf]

'프로그램 사용 > yocto project' 카테고리의 다른 글

yocto build on i5-3570  (0) 2023.09.07
bitbake --help  (0) 2023.08.29
imx8 yocto  (0) 2023.08.28
imx8 yocto build on ubuntu 22.04  (0) 2023.02.10
라즈베리 파이 with yocto project  (2) 2015.07.30
Posted by 구차니

문서가 개정되어서 하기 쉽게 잘 나와있는 듯.

 

Rev. LF6.1.22_2.0.0 — 30 June 2023

The recommended minimum Ubuntu version is 20.04 or later.

$ sudo apt install gawk wget git diffstat unzip texinfo gcc build-essential chrpath socat cpio python3 python3-pip python3-pexpect xz-utils debianutils iputils-ping python3-git python3-jinja2 libegl1-mesa libsdl1.2-dev python3- subunit mesa-common-dev zstd liblz4-tool file locales

// lz4c 어쩌구 나오면
$ sudo apt install lz4

// repo 설치
$ mkdir ~/bin (this step may not be needed if the bin folder already exists)
$ curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
$ chmod a+x ~/bin/repo

// repo 초기화
$ repo init -u https://github.com/nxp-imx/imx-manifest -b imx-linux-mickledore -m imx-6.1.22-2.0.0.xml
$ repo sync

$ DISTRO=<distro name> MACHINE=<machine name> source imx-setup-release.sh -b <build dir>

$ bitbake imx-image-multimedia

[링크 : https://www.nxp.com/docs/en/user-guide/IMX_YOCTO_PROJECT_USERS_GUIDE.pdf]

 

python 패키지 명이 바뀌어서 손을 대보는데 그래도 안되서

혹시나 하는 마음에 3.9를 설치해보니 정상적으로 설치안되었다고 -_-

$ bitbake -c compile -f weston
Traceback (most recent call last):
  File "/home/falinux/work/work/yocto/sources/poky/bitbake/bin/bitbake", line 19, in <module>
    import bb
  File "/home/falinux/work/work/yocto/sources/poky/bitbake/lib/bb/__init__.py", line 128, in <module>
    from bb import fetch2 as fetch
  File "/home/falinux/work/work/yocto/sources/poky/bitbake/lib/bb/fetch2/__init__.py", line 26, in <module>
    import bb.persist_data, bb.utils
  File "/home/falinux/work/work/yocto/sources/poky/bitbake/lib/bb/persist_data.py", line 22, in <module>
    from collections import Mapping
ImportError: cannot import name 'Mapping' from 'collections' (/usr/lib/python3.10/collections/__init__.py)

$ bitbake -c compile -f weston
WARNING: Host distribution "ubuntu-22.04" has not been validated with this version of the build system; you may possibly experience unexpected failures. It is recommended that you use a tested distribution.
ERROR:  OE-core's config sanity checker detected a potential misconfiguration.
    Either fix the cause of this error or at your own risk disable the checker (see sanity.conf).
    Following is the list of potential problems / advisories:

    Your Python 3 is not a full install. Please install the module distutils.sysconfig (see the Getting Started guide for further information).


Summary: There was 1 WARNING message shown.
Summary: There was 1 ERROR message shown, returning a non-zero exit code.

 

3.10 부터 패키지 명칭이 바뀌어서 그런일이 생기는 듯

For version 3.10 or above –

from collections.abc import MutableMapping
For version 3.9 or lower –

from collections import MutableMapping

[링크 : https://stackoverflow.com/questions/70943244/attributeerror-module-collections-has-no-attribute-mutablemapping]

 

+

걍 docker 쓸까..

[링크 :https://github.com/nxp-imx/imx-docker]

'프로그램 사용 > yocto project' 카테고리의 다른 글

bitbake --help  (0) 2023.08.29
Do not use Bitbake as root.  (0) 2023.08.28
imx8 yocto build on ubuntu 22.04  (0) 2023.02.10
라즈베리 파이 with yocto project  (2) 2015.07.30
yocto project 구조  (0) 2015.07.29
Posted by 구차니

$# 인자의 갯수

$@ 현재 타겟의 이름 (나열)

$* 현재 타겟의 이름 (하나로)

$^ 현재 타겟의 종속 항목 리스트

[링크 : https://yooloo.tistory.com/m/131]

[링크 : https://bowbowbow.tistory.com/12]

'프로그램 사용 > make, configure' 카테고리의 다른 글

make 조건식  (0) 2023.08.16
cmake ninja, cmake 옵션주기  (0) 2022.12.07
cmake 옵션 확인  (0) 2021.01.20
cmake 빌드 에러시  (0) 2021.01.19
make order  (0) 2016.06.16
Posted by 구차니

지시자. 그러니까 아래서 make foo로 시작하는 부분에 대해서는

조건식이 없는걸로 봐서는 그 이전에 미리 조건식에 의해서 분기를 처리하고

그 아래에서는 조건식 없이 해야 하는건가?

 

libs_for_gcc = -lgnu
normal_libs =

ifeq ($(CC),gcc)
  libs=$(libs_for_gcc)
else
  libs=$(normal_libs)
endif

foo: $(objects)
        $(CC) -o foo $(objects) $(libs)

[링크 : https://www.gnu.org/software/make/manual/html_node/Conditional-Example.html]

    [링크 : https://www.gnu.org/software/make/manual/html_node/Conditionals.html]

 

 

 

'프로그램 사용 > make, configure' 카테고리의 다른 글

makefile 매크로(?)  (0) 2023.08.28
cmake ninja, cmake 옵션주기  (0) 2022.12.07
cmake 옵션 확인  (0) 2021.01.20
cmake 빌드 에러시  (0) 2021.01.19
make order  (0) 2016.06.16
Posted by 구차니
프로그램 사용/gcc2023. 8. 8. 11:17

문득 cpu 사양 다시 볼까? 싶어서 보니

어? NEON이 아니라 NEON MPE?

NEON™ media-processing engine
Single and double precision Vector Floating Point Unit (VFPU)

[링크 : https://docs.xilinx.com/v/u/en-US/ds190-Zynq-7000-Overview]

 

그래서 cortex-A9 NEON MPE 명령을 뒤져보는데

VADD나 VSUB VMUL VDIV에 대해서 찾아보니 NEON으로는 float까지만 되도, double은 VFP를 통해서 가능할 것 같은데

D
Double precision floating-point values

F
Single precision floating-point values

H
Half precision floating-point values

I
Integer values

P
Polynomials with single-bit coefficients

X
Operation is independent of data representation.


Name Advanced SIMD VFP Description
VADD I, F F, D Add
VDIV - F, D Divide
VMUL I, F, P F, D Multiply
VSUB I, F F, D Subtract

[링크 : https://developer.arm.com/documentation/ddi0409/i/instruction-timing/cortex-a9-neon-mpe-instructions?lang=en]

타입을 바꾸어 봐도 안되서 골머리를 싸매다가(float는 된다매!!! double은 vfp로 된다매!!!)

main.c:187:2: missed: couldn't vectorize loop
main.c:177:6: missed: not vectorized: unsupported data-type double


main.c:187:2: missed: couldn't vectorize loop
main.c:177:6: missed: not vectorized: unsupported data-type float

 

금단의 플래그를 설정하니 잘 된다. -_-

main.c:194:2: optimized: loop vectorized using 16 byte vectors
main.c:188:2: optimized: loop vectorized using 16 byte vectors

 

IEEE를 무시하고 안전하지 않은 연산도 적용되고 하다보니 영 쓰기가 불안한데...

In addition GCC offers the -ffast-math flag which is a shortcut for several options, presenting the least conforming but fastest math mode. It enables -fno-trapping-math, -funsafe-math-optimizations, -ffinite-math-only, -fno-errno-math, -fno-signaling-nans, -fno-rounding-math, -fcx-limited-range and -fno-signed-zeros. Each of these flags violates IEEE in a different way. -ffast-math also may disable some features of the hardware IEEE implementation such as the support for denormals or flush-to-zero behavior. An example for such a case is x86_64 with it's use of SSE and SSE2 units for floating point math. 

[링크 : https://gcc.gnu.org/wiki/FloatingPointMath]


아무튼 어제 어디서 보다 찾았던 associative 옵션을 못찾아서 헤매다가 다시 생각나서 보는데

associative하지 않다.. 이게 무슨 의미지?

Goldberg 논문에 나온 것 처럼 floating-point의 계산은 associative하지 않다.
그러므로 ffast-math 연산 방식에서는 실제 값에 오류를 포함할 수 밖에 없다.
이러한 점 때문에 ffast-math 방식은 IEEE에서 정의한 방식을 따르지 못한다.

위와 같은 특징 때문에, 정확한 값을 계산해야하는 것이라면 ffast-math를 사용하면 안된다.
하지만 대충 어림잡아서 맞는 값을 원하는 것이라면?

[링크 : https://www.cv-learn.com/20210107-gcc-ffast-math/]


float 형의 오차로 인해서 계산때 마다 동일 결과가 나오지 않는다는 의미군..

결합의((a × b) × c = a × (b × c)의 예에서처럼 계산식이 부분의 순서와 상관없이 동일한 결과가 나오는)

[링크 : https://en.dict.naver.com/#/entry/enko/43a6bbaaacf546199c5d4c57b6b88ebb]


그래서 한번 -ffast-math 대신 적용해보려는데 다른 상위 옵션에 의해서 무시 당했다고 나온다.

누가 상위 옵션이려나?

-o -W -Wall -fopt-info-vec -march=armv7-a -mfpu=neon -O3 -fassociative-math

cc1: warning: ‘-fassociative-math’ disabled; other options take precedence


-ffast-math 보단 순한 맛이긴 한데 적용이 안되면 의미 없지 머..

-fassociative-math
Allow re-association of operands in series of floating-point operations. This violates the ISO C and C++ language standard by possibly changing computation result. NOTE: re-ordering may change the sign of zero as well as ignore NaNs and inhibit or create underflow or overflow (and thus cannot be used on code that relies on rounding behavior like (x + 2**52) - 2**52. May also reorder floating-point comparisons and thus may not be used when ordered comparisons are required. This option requires that both -fno-signed-zeros and -fno-trapping-math be in effect. Moreover, it doesn’t make much sense with -frounding-math. For Fortran the option is automatically enabled when both -fno-signed-zeros and -fno-trapping-math are in effect.

The default is -fno-associative-math.

[링크 : https://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html]

'프로그램 사용 > gcc' 카테고리의 다른 글

gcc tree vectorize  (0) 2023.01.26
gcc fstack-protector-strong  (0) 2022.12.06
gcc vectorization 실패  (0) 2022.06.02
gcc / 문자열 선언  (0) 2022.03.17
static link  (0) 2022.02.07
Posted by 구차니

엑셀은 간단했는데 ㅠㅠ

 

중복 제거할 영역 선택
상단 메뉴에서 'Data > More Filters > Standard Filter...' 선택
필드 이름을 '-none-'으로 변경, 하단 'Options > No duplications' 체크
중복 제거 확인

[링크 : https://davelogs.tistory.com/103]

Posted by 구차니