A minha pergunta é um tanto aberta, por isso, perguntarei especificamente no contexto do DLIB, no entanto, qualquer conselho geral será apreciado.
Somos uma empresa de P & D e fazemos testes extensivos, e precisamos capturar o máximo possível de informações sobre o estado de um sistema durante a experimentação (por exemplo, velocidade da CPU, memória, tipo de GPU, etc ...) . Isso também se estende a compiladores e bibliotecas. Se eu tenho um programa em C ++, vamos chamá-lo de foo
Eu posso obter algumas informações sobre as bibliotecas que ele usa, como ldd foo
e obter a seguinte saída
linux-vdso.so.1 => (0x00007ffd73d64000)
libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007fbda773d000)
libgif.so.7 => /usr/lib/x86_64-linux-gnu/libgif.so.7 (0x00007fbda7534000)
libpng12.so.0 => /lib/x86_64-linux-gnu/libpng12.so.0 (0x00007fbda730f000)
libjpeg.so.8 => /usr/lib/x86_64-linux-gnu/libjpeg.so.8 (0x00007fbda70b5000)
libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007fbda6d33000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007fbda6a2a000)
libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007fbda6813000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fbda6449000)
/lib64/ld-linux-x86-64.so.2 (0x0000559e91e7a000)
libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1 (0x00007fbda622f000)
No nosso caso, estamos interessados em saber coisas como
dlib
está sendo usada OpenBLAS
é usado ou dlib BLAS
cudNN
está instalado e dlib
está usando cuda
Atualmente, estou gerenciando todo o sistema operacional e nós instalamos / reinstalamos sistemas operacionais e executamos um script que automatiza todo o processo. Sempre que possível (ou seja, versão cudNN, versão dlib) eu descubro como consultar isso. Onde não for possível, então eu vou no arquivo de log, procure por uma linha que me diz o que eu quero saber (ou seja, -- Enabling CUDA support for dlib. DLIB WILL USE CUDA
ou Using OpenBLAS's built in LAPACK
). É aí que as coisas ficam realmente hacky e eu escrevo no arquivo README
, salvei em um arquivo CSV
ou fui até o departamento de Ciências e disse a eles que Machine-01
estava rodando dlib-19.9
e Machine-02
estão executando dlib-19.8
, mas com cuda
ativado, Machine-03
está executando dlib-19.7
, mas com OpenBLAS
ativado, etc.
Quais são as melhores práticas do Linux / Unix quando se trata de capturar informações em um sistema para, neste caso, fins de benchmarking? Devo estar executando um programa de teste cuda C ++ para confirmar se funciona? Devo espiar dentro do Makefile e checar para ver quais versões de bibliotecas estão sendo instaladas?