Giter VIP home page Giter VIP logo

Comments (14)

Disservin avatar Disservin commented on June 12, 2024

Can you give us some information about how you compiled it and what the compilation output and stockfish output was?

from stockfish.

jackL999 avatar jackL999 commented on June 12, 2024

I compiled it as I always do using the command,
make -j8 profile-bulid ARCH=x86-64-bmi2 COMP=mingw CPPFLAGS="-DNNUE_EMBEDDDING_OFF -march=haswell"
this compilation will fail as soon as it tries to execute Stockfish during profiling.

After experimenting on this I discovered that the problem only occurs when "-march=haswell" is included in CPPFLAGS.
Note the source compiles with out any errors using
make -j8 bulid ARCH=x86-64-bmi2 COMP=mingw CPPFLAGS="-DNNUE_EMBEDDDING_OFF -march=haswell"
it just won't run without crashing.

Something in the latest source is clobbering or interfering with the optimization setting "-march=haswell".

from stockfish.

Disservin avatar Disservin commented on June 12, 2024

Can you run this through gdb perhaps (if it is installed for you)?
gdb .\stockfish.exe
run

from stockfish.

jackL999 avatar jackL999 commented on June 12, 2024

Upon examining the changes to src/nnue/network.cpp and src/uci.cpp I noticed a lot of changes to Embedding nnue. I wonder if those are the source of bug. Could it be the source isn't parsing the CPPFLAGS instruction properly?

from stockfish.

Disservin avatar Disservin commented on June 12, 2024

@jackL999 can you please give the entire output of what is shown on the terminal?

from stockfish.

Disservin avatar Disservin commented on June 12, 2024

You also have a typo in profile-bulid it's profile-build and in -DNNUE_EMBEDDDING_OFF... it's -DNNUE_EMBEDDING_OFF

from stockfish.

jackL999 avatar jackL999 commented on June 12, 2024

Yes, but those typos were only made here. They don't exist in the command line executed in the terminal window. That command is taken directly from the history file and has successfully executed the compilation of Stockfish source scores of times.

from stockfish.

Disservin avatar Disservin commented on June 12, 2024

@jackL999 can you please give the entire output of what is shown on the terminal?

…?

from stockfish.

jackL999 avatar jackL999 commented on June 12, 2024

from previous request, running gdb, I get
(gdb) r
Starting program: c:\v\Stockfish\src\stockfish.exe
[New Thread 33284.0x9214]
[New Thread 33284.0x91b0]
[New Thread 33284.0x9118]
Stockfish dev-20240312-55df0ee0 by the Stockfish developers (see AUTHORS file)

Thread 1 received signal SIGSEGV, Segmentation fault.
0x00007ff622e3561a in Stockfish::UCI::UCI(int, char**) ()
(gdb)

from stockfish.

jackL999 avatar jackL999 commented on June 12, 2024

Compilation produces the following,
make -j8 build ARCH=x86-64-bmi2 COMP=mingw CPPFLAGS="-DNNUE_EMBEDDING_OFF -march=haswell"
Default net: nn-1ceb1ade0001.nnue
nn-1ceb1ade0001.nnue available : OK
Network validated
Default net: nn-baff1ede1f90.nnue
nn-baff1ede1f90.nnue available : OK
Network validated

Config:
debug: 'no'
sanitize: 'none'
optimize: 'yes'
arch: 'x86_64'
bits: '64'
kernel: 'MSYS_NT-10.0-19045'
os: 'Windows_NT'
prefetch: 'yes'
popcnt: 'yes'
pext: 'yes'
sse: 'yes'
mmx: 'no'
sse2: 'yes'
ssse3: 'yes'
sse41: 'yes'
avx2: 'yes'
avxvnni: 'no'
avx512: 'no'
vnni256: 'no'
vnni512: 'no'
neon: 'no'
dotprod: 'no'
arm_version: '0'
target_windows: 'yes'

Flags:
CXX: x86_64-w64-mingw32-c++
CXXFLAGS: -Wall -Wcast-qual -fno-exceptions -std=c++17 -pedantic -Wextra -Wshadow -Wmissing-declarations -DNDEBUG -O3 -funroll-loops -DIS_64BIT -msse -msse3 -mpopcnt -DUSE_POPCNT -DUSE_AVX2 -mavx2 -mbmi -DUSE_SSE41 -msse4.1 -DUSE_SSSE3 -mssse3 -DUSE_SSE2 -msse2 -DUSE_PEXT -mbmi2 -DGIT_SHA=55df0ee0 -DGIT_DATE=20240312 -DARCH=x86-64-bmi2 -flto -flto-partition=one
LDFLAGS: -static -Wall -Wcast-qual -fno-exceptions -std=c++17 -pedantic -Wextra -Wshadow -Wmissing-declarations -DNDEBUG -O3 -funroll-loops -DIS_64BIT -msse -msse3 -mpopcnt -DUSE_POPCNT -DUSE_AVX2 -mavx2 -mbmi -DUSE_SSE41 -msse4.1 -DUSE_SSSE3 -mssse3 -DUSE_SSE2 -msse2 -DUSE_PEXT -mbmi2 -DGIT_SHA=55df0ee0 -DGIT_DATE=20240312 -DARCH=x86-64-bmi2 -flto -flto-partition=one -save-temps

Testing config sanity. If this fails, try 'make help' ...

make ARCH=x86-64-bmi2 COMP=mingw all
make[1]: Entering directory 'c:/v/Stockfish/src'
x86_64-w64-mingw32-c++ -Wall -Wcast-qual -fno-exceptions -std=c++17 -pedantic -Wextra -Wshadow -Wmissing-declarations -DNDEBUG -O3 -funroll-loops -DIS_64BIT -msse -msse3 -mpopcnt -DUSE_POPCNT -DUSE_AVX2 -mavx2 -mbmi -DUSE_SSE41 -msse4.1 -DUSE_SSSE3 -mssse3 -DUSE_SSE2 -msse2 -DUSE_PEXT -mbmi2 -DGIT_SHA=55df0ee0 -DGIT_DATE=20240312 -DARCH=x86-64-bmi2 -flto -flto-partition=one -DNNUE_EMBEDDING_OFF -march=haswell -c -o benchmark.o benchmark.cpp
x86_64-w64-mingw32-c++ -Wall -Wcast-qual -fno-exceptions -std=c++17 -pedantic -Wextra -Wshadow -Wmissing-declarations -DNDEBUG -O3 -funroll-loops -DIS_64BIT -msse -msse3 -mpopcnt -DUSE_POPCNT -DUSE_AVX2 -mavx2 -mbmi -DUSE_SSE41 -msse4.1 -DUSE_SSSE3 -mssse3 -DUSE_SSE2 -msse2 -DUSE_PEXT -mbmi2 -DGIT_SHA=55df0ee0 -DGIT_DATE=20240312 -DARCH=x86-64-bmi2 -flto -flto-partition=one -DNNUE_EMBEDDING_OFF -march=haswell -c -o bitboard.o bitboard.cpp
x86_64-w64-mingw32-c++ -Wall -Wcast-qual -fno-exceptions -std=c++17 -pedantic -Wextra -Wshadow -Wmissing-declarations -DNDEBUG -O3 -funroll-loops -DIS_64BIT -msse -msse3 -mpopcnt -DUSE_POPCNT -DUSE_AVX2 -mavx2 -mbmi -DUSE_SSE41 -msse4.1 -DUSE_SSSE3 -mssse3 -DUSE_SSE2 -msse2 -DUSE_PEXT -mbmi2 -DGIT_SHA=55df0ee0 -DGIT_DATE=20240312 -DARCH=x86-64-bmi2 -flto -flto-partition=one -DNNUE_EMBEDDING_OFF -march=haswell -c -o evaluate.o evaluate.cpp
x86_64-w64-mingw32-c++ -Wall -Wcast-qual -fno-exceptions -std=c++17 -pedantic -Wextra -Wshadow -Wmissing-declarations -DNDEBUG -O3 -funroll-loops -DIS_64BIT -msse -msse3 -mpopcnt -DUSE_POPCNT -DUSE_AVX2 -mavx2 -mbmi -DUSE_SSE41 -msse4.1 -DUSE_SSSE3 -mssse3 -DUSE_SSE2 -msse2 -DUSE_PEXT -mbmi2 -DGIT_SHA=55df0ee0 -DGIT_DATE=20240312 -DARCH=x86-64-bmi2 -flto -flto-partition=one -DNNUE_EMBEDDING_OFF -march=haswell -c -o main.o main.cpp
x86_64-w64-mingw32-c++ -Wall -Wcast-qual -fno-exceptions -std=c++17 -pedantic -Wextra -Wshadow -Wmissing-declarations -DNDEBUG -O3 -funroll-loops -DIS_64BIT -msse -msse3 -mpopcnt -DUSE_POPCNT -DUSE_AVX2 -mavx2 -mbmi -DUSE_SSE41 -msse4.1 -DUSE_SSSE3 -mssse3 -DUSE_SSE2 -msse2 -DUSE_PEXT -mbmi2 -DGIT_SHA=55df0ee0 -DGIT_DATE=20240312 -DARCH=x86-64-bmi2 -flto -flto-partition=one -DNNUE_EMBEDDING_OFF -march=haswell -c -o misc.o misc.cpp
x86_64-w64-mingw32-c++ -Wall -Wcast-qual -fno-exceptions -std=c++17 -pedantic -Wextra -Wshadow -Wmissing-declarations -DNDEBUG -O3 -funroll-loops -DIS_64BIT -msse -msse3 -mpopcnt -DUSE_POPCNT -DUSE_AVX2 -mavx2 -mbmi -DUSE_SSE41 -msse4.1 -DUSE_SSSE3 -mssse3 -DUSE_SSE2 -msse2 -DUSE_PEXT -mbmi2 -DGIT_SHA=55df0ee0 -DGIT_DATE=20240312 -DARCH=x86-64-bmi2 -flto -flto-partition=one -DNNUE_EMBEDDING_OFF -march=haswell -c -o movegen.o movegen.cpp
x86_64-w64-mingw32-c++ -Wall -Wcast-qual -fno-exceptions -std=c++17 -pedantic -Wextra -Wshadow -Wmissing-declarations -DNDEBUG -O3 -funroll-loops -DIS_64BIT -msse -msse3 -mpopcnt -DUSE_POPCNT -DUSE_AVX2 -mavx2 -mbmi -DUSE_SSE41 -msse4.1 -DUSE_SSSE3 -mssse3 -DUSE_SSE2 -msse2 -DUSE_PEXT -mbmi2 -DGIT_SHA=55df0ee0 -DGIT_DATE=20240312 -DARCH=x86-64-bmi2 -flto -flto-partition=one -DNNUE_EMBEDDING_OFF -march=haswell -c -o movepick.o movepick.cpp
x86_64-w64-mingw32-c++ -Wall -Wcast-qual -fno-exceptions -std=c++17 -pedantic -Wextra -Wshadow -Wmissing-declarations -DNDEBUG -O3 -funroll-loops -DIS_64BIT -msse -msse3 -mpopcnt -DUSE_POPCNT -DUSE_AVX2 -mavx2 -mbmi -DUSE_SSE41 -msse4.1 -DUSE_SSSE3 -mssse3 -DUSE_SSE2 -msse2 -DUSE_PEXT -mbmi2 -DGIT_SHA=55df0ee0 -DGIT_DATE=20240312 -DARCH=x86-64-bmi2 -flto -flto-partition=one -DNNUE_EMBEDDING_OFF -march=haswell -c -o position.o position.cpp
x86_64-w64-mingw32-c++ -Wall -Wcast-qual -fno-exceptions -std=c++17 -pedantic -Wextra -Wshadow -Wmissing-declarations -DNDEBUG -O3 -funroll-loops -DIS_64BIT -msse -msse3 -mpopcnt -DUSE_POPCNT -DUSE_AVX2 -mavx2 -mbmi -DUSE_SSE41 -msse4.1 -DUSE_SSSE3 -mssse3 -DUSE_SSE2 -msse2 -DUSE_PEXT -mbmi2 -DGIT_SHA=55df0ee0 -DGIT_DATE=20240312 -DARCH=x86-64-bmi2 -flto -flto-partition=one -DNNUE_EMBEDDING_OFF -march=haswell -c -o search.o search.cpp
x86_64-w64-mingw32-c++ -Wall -Wcast-qual -fno-exceptions -std=c++17 -pedantic -Wextra -Wshadow -Wmissing-declarations -DNDEBUG -O3 -funroll-loops -DIS_64BIT -msse -msse3 -mpopcnt -DUSE_POPCNT -DUSE_AVX2 -mavx2 -mbmi -DUSE_SSE41 -msse4.1 -DUSE_SSSE3 -mssse3 -DUSE_SSE2 -msse2 -DUSE_PEXT -mbmi2 -DGIT_SHA=55df0ee0 -DGIT_DATE=20240312 -DARCH=x86-64-bmi2 -flto -flto-partition=one -DNNUE_EMBEDDING_OFF -march=haswell -c -o thread.o thread.cpp
x86_64-w64-mingw32-c++ -Wall -Wcast-qual -fno-exceptions -std=c++17 -pedantic -Wextra -Wshadow -Wmissing-declarations -DNDEBUG -O3 -funroll-loops -DIS_64BIT -msse -msse3 -mpopcnt -DUSE_POPCNT -DUSE_AVX2 -mavx2 -mbmi -DUSE_SSE41 -msse4.1 -DUSE_SSSE3 -mssse3 -DUSE_SSE2 -msse2 -DUSE_PEXT -mbmi2 -DGIT_SHA=55df0ee0 -DGIT_DATE=20240312 -DARCH=x86-64-bmi2 -flto -flto-partition=one -DNNUE_EMBEDDING_OFF -march=haswell -c -o timeman.o timeman.cpp
x86_64-w64-mingw32-c++ -Wall -Wcast-qual -fno-exceptions -std=c++17 -pedantic -Wextra -Wshadow -Wmissing-declarations -DNDEBUG -O3 -funroll-loops -DIS_64BIT -msse -msse3 -mpopcnt -DUSE_POPCNT -DUSE_AVX2 -mavx2 -mbmi -DUSE_SSE41 -msse4.1 -DUSE_SSSE3 -mssse3 -DUSE_SSE2 -msse2 -DUSE_PEXT -mbmi2 -DGIT_SHA=55df0ee0 -DGIT_DATE=20240312 -DARCH=x86-64-bmi2 -flto -flto-partition=one -DNNUE_EMBEDDING_OFF -march=haswell -c -o tt.o tt.cpp
x86_64-w64-mingw32-c++ -Wall -Wcast-qual -fno-exceptions -std=c++17 -pedantic -Wextra -Wshadow -Wmissing-declarations -DNDEBUG -O3 -funroll-loops -DIS_64BIT -msse -msse3 -mpopcnt -DUSE_POPCNT -DUSE_AVX2 -mavx2 -mbmi -DUSE_SSE41 -msse4.1 -DUSE_SSSE3 -mssse3 -DUSE_SSE2 -msse2 -DUSE_PEXT -mbmi2 -DGIT_SHA=55df0ee0 -DGIT_DATE=20240312 -DARCH=x86-64-bmi2 -flto -flto-partition=one -DNNUE_EMBEDDING_OFF -march=haswell -c -o uci.o uci.cpp
x86_64-w64-mingw32-c++ -Wall -Wcast-qual -fno-exceptions -std=c++17 -pedantic -Wextra -Wshadow -Wmissing-declarations -DNDEBUG -O3 -funroll-loops -DIS_64BIT -msse -msse3 -mpopcnt -DUSE_POPCNT -DUSE_AVX2 -mavx2 -mbmi -DUSE_SSE41 -msse4.1 -DUSE_SSSE3 -mssse3 -DUSE_SSE2 -msse2 -DUSE_PEXT -mbmi2 -DGIT_SHA=55df0ee0 -DGIT_DATE=20240312 -DARCH=x86-64-bmi2 -flto -flto-partition=one -DNNUE_EMBEDDING_OFF -march=haswell -c -o ucioption.o ucioption.cpp
x86_64-w64-mingw32-c++ -Wall -Wcast-qual -fno-exceptions -std=c++17 -pedantic -Wextra -Wshadow -Wmissing-declarations -DNDEBUG -O3 -funroll-loops -DIS_64BIT -msse -msse3 -mpopcnt -DUSE_POPCNT -DUSE_AVX2 -mavx2 -mbmi -DUSE_SSE41 -msse4.1 -DUSE_SSSE3 -mssse3 -DUSE_SSE2 -msse2 -DUSE_PEXT -mbmi2 -DGIT_SHA=55df0ee0 -DGIT_DATE=20240312 -DARCH=x86-64-bmi2 -flto -flto-partition=one -DNNUE_EMBEDDING_OFF -march=haswell -c -o tune.o tune.cpp
x86_64-w64-mingw32-c++ -Wall -Wcast-qual -fno-exceptions -std=c++17 -pedantic -Wextra -Wshadow -Wmissing-declarations -DNDEBUG -O3 -funroll-loops -DIS_64BIT -msse -msse3 -mpopcnt -DUSE_POPCNT -DUSE_AVX2 -mavx2 -mbmi -DUSE_SSE41 -msse4.1 -DUSE_SSSE3 -mssse3 -DUSE_SSE2 -msse2 -DUSE_PEXT -mbmi2 -DGIT_SHA=55df0ee0 -DGIT_DATE=20240312 -DARCH=x86-64-bmi2 -flto -flto-partition=one -DNNUE_EMBEDDING_OFF -march=haswell -c -o tbprobe.o syzygy/tbprobe.cpp
x86_64-w64-mingw32-c++ -Wall -Wcast-qual -fno-exceptions -std=c++17 -pedantic -Wextra -Wshadow -Wmissing-declarations -DNDEBUG -O3 -funroll-loops -DIS_64BIT -msse -msse3 -mpopcnt -DUSE_POPCNT -DUSE_AVX2 -mavx2 -mbmi -DUSE_SSE41 -msse4.1 -DUSE_SSSE3 -mssse3 -DUSE_SSE2 -msse2 -DUSE_PEXT -mbmi2 -DGIT_SHA=55df0ee0 -DGIT_DATE=20240312 -DARCH=x86-64-bmi2 -flto -flto-partition=one -DNNUE_EMBEDDING_OFF -march=haswell -c -o nnue_misc.o nnue/nnue_misc.cpp
x86_64-w64-mingw32-c++ -Wall -Wcast-qual -fno-exceptions -std=c++17 -pedantic -Wextra -Wshadow -Wmissing-declarations -DNDEBUG -O3 -funroll-loops -DIS_64BIT -msse -msse3 -mpopcnt -DUSE_POPCNT -DUSE_AVX2 -mavx2 -mbmi -DUSE_SSE41 -msse4.1 -DUSE_SSSE3 -mssse3 -DUSE_SSE2 -msse2 -DUSE_PEXT -mbmi2 -DGIT_SHA=55df0ee0 -DGIT_DATE=20240312 -DARCH=x86-64-bmi2 -flto -flto-partition=one -DNNUE_EMBEDDING_OFF -march=haswell -c -o half_ka_v2_hm.o nnue/features/half_ka_v2_hm.cpp
x86_64-w64-mingw32-c++ -Wall -Wcast-qual -fno-exceptions -std=c++17 -pedantic -Wextra -Wshadow -Wmissing-declarations -DNDEBUG -O3 -funroll-loops -DIS_64BIT -msse -msse3 -mpopcnt -DUSE_POPCNT -DUSE_AVX2 -mavx2 -mbmi -DUSE_SSE41 -msse4.1 -DUSE_SSSE3 -mssse3 -DUSE_SSE2 -msse2 -DUSE_PEXT -mbmi2 -DGIT_SHA=55df0ee0 -DGIT_DATE=20240312 -DARCH=x86-64-bmi2 -flto -flto-partition=one -DNNUE_EMBEDDING_OFF -march=haswell -c -o network.o nnue/network.cpp
x86_64-w64-mingw32-c++ -o stockfish.exe benchmark.o bitboard.o evaluate.o main.o misc.o movegen.o movepick.o position.o search.o thread.o timeman.o tt.o uci.o ucioption.o tune.o tbprobe.o nnue_misc.o half_ka_v2_hm.o network.o -static -Wall -Wcast-qual -fno-exceptions -std=c++17 -pedantic -Wextra -Wshadow -Wmissing-declarations -DNDEBUG -O3 -funroll-loops -DIS_64BIT -msse -msse3 -mpopcnt -DUSE_POPCNT -DUSE_AVX2 -mavx2 -mbmi -DUSE_SSE41 -msse4.1 -DUSE_SSSE3 -mssse3 -DUSE_SSE2 -msse2 -DUSE_PEXT -mbmi2 -DGIT_SHA=55df0ee0 -DGIT_DATE=20240312 -DARCH=x86-64-bmi2 -flto -flto-partition=one -save-temps
make[1]: Leaving directory 'c:/v/Stockfish/src'

from stockfish.

jackL999 avatar jackL999 commented on June 12, 2024

I re-ran gdb with stockfish compiled using debug=yes
make -j8 build ARCH=x86-64-bmi2 debug=yes COMP=mingw CPPFLAGS="-DNNUE_EMBEDDING_OFF -march=haswell"
Default net: nn-1ceb1ade0001.nnue
nn-1ceb1ade0001.nnue available : OK
Network validated
Default net: nn-baff1ede1f90.nnue
nn-baff1ede1f90.nnue available : OK
Network validated

Config:
debug: 'yes'
[....]
make[1]: Leaving directory 'c:/v/Stockfish/src'

It produced the following output
gdb.exe stockfish.exe
[...]
Reading symbols from stockfish.exe...
(gdb) r
Starting program: c:\v\Stockfish\src\stockfish.exe
[New Thread 41048.0x85f8]
[New Thread 41048.0x9970]
[New Thread 41048.0xa334]
Stockfish dev-20240312-55df0ee0 by the Stockfish developers (see AUTHORS file)

Thread 1 received signal SIGSEGV, Segmentation fault.
0x00007ff7a1746d20 in Stockfish::UCI::UCI (this=this@entry=0x5ffc20, argc=argc@entry=1, argv=argv@entry=0x791ba0)
at uci.cpp:96
96 threads.set({options, threads, tt, networks});
(gdb)

from stockfish.

jackL999 avatar jackL999 commented on June 12, 2024

FYI, I was able to successfully compile and execute commit f072634, but commit 1a26d69 "Refactor Network Usage" causes the same Segmentation fault as noted with the latest commit.
It appears the problem began with changes made in commit 1a26d69.

from stockfish.

jackL999 avatar jackL999 commented on June 12, 2024

I was able to get the latest commit 55df0ee to compile and execute on Windows without problems using MinGW64 on ARCH Linux.

Running the command "stockfish.exe compiler" in Windows using the ARCH Linux build produces the following output,

Stockfish dev-20240312-55df0ee0 by the Stockfish developers (see AUTHORS file)
Compiled by : g++ (GNUC) 13.1.0 on MinGW64
Compilation architecture : x86-64-bmi2
Compilation settings : 64bit BMI2 AVX2 SSE41 SSSE3 SSE2 POPCNT
Compiler VERSION macro : 13.1.0

This means that the problem is likely with the winlibs.com MinGW64 compiler and not with the Stockfish source. It is odd though that every build using this compiler on source commits prior to 1a26d69 worked without any issues.

from stockfish.

Disservin avatar Disservin commented on June 12, 2024

@jackL999 btw the new comple uses 13.1 vs your original one was 13.2 ...
did you also try running a make clean before compiliation?

Regarding winlibs, I recommend following the installation guide for windows from here https://github.com/official-stockfish/Stockfish/wiki/Developers#windows

from stockfish.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.