Como fizemos o overclock do CAD COMPASS-3D → Parte 2

Na última parte, falamos sobre o nascimento do KOMPAS-3D v18, algo sobre a seleção de critérios e modelos para testar novas funções, e também abordamos o tópico de renderização na versão “Básico”.
Vamos continuar com a história sobre a opção de renderização "Melhorado".


Chamadas de desenho

Alexander Tulup, programador:
“O principal problema do desempenho da exibição de cenas grandes está associado a um grande número de chamadas de“ chamadas de desenho ”. A versão antiga da renderização é construída sobre o modelo de dados matemáticos. Assim, para cada primitiva - pontos, arestas, faces - um método separado foi chamado para sua exibição.

Para cada chamada de empate, o OpenGL (driver) realiza uma série de verificações, convertendo simultaneamente os comandos recebidos em um formato compreensível para a placa de vídeo, após o qual as chamadas são adicionadas à fila e já são executadas.


Esquema de transferência de comando da GPU no OpenGL ( fonte )

Com um grande número de detalhes, o número de chamadas para a CPU aumenta tanto que os dados simplesmente não têm tempo para chegar na placa de vídeo. Temos uma situação em que em uma placa de vídeo muito forte ela "desacelera" da mesma maneira que em uma placa média ou mais fraca.

Você pode lidar com isso reduzindo o número de renderizações (transições de estado) - agrupe por material, combine geometria comum ( instanciação ) etc.

Não devemos esquecer que, de toda a cena, vemos apenas uma parte dela. Algoritmos para detectar objetos invisíveis são aplicáveis ​​aqui (seleção de frustum, seleção de oclusão, etc.)

Inspirados no exemplo de The Road to One Million Draws e AZDO , decidimos seguir um caminho bastante incomum: livrar-se das alterações de estado no lado da CPU o máximo possível. Agora quase tudo é feito na placa de vídeo. Todos os atributos necessários são retirados diretamente da memória de vídeo enquanto são desenhados no próprio sombreador ( sombreador ), que foi possível graças ao aumento da memória de vídeo ( VRAM ) e ao advento do SSBO .


1.000.000 dados

Das vantagens dessa abordagem: a velocidade da tela se tornou realmente alta. A velocidade é limitada apenas pelos recursos da GPU, ou seja, a quantidade de dados que ela pode processar.

Também permitiu implementar com eficiência mecanismos de recorte para objetos invisíveis. Os resultados da verificação de visibilidade são gravados diretamente na memória de vídeo e, a partir daí, os comandos de desenho são formados com base neles. Ou seja, no lado da CPU, você não precisa esperar.

Uma das principais desvantagens dessa abordagem é a alta complexidade de desenvolvimento. Muito precisa ser implementado novamente, levando em consideração a abordagem escolhida. Além disso, muitas vezes tivemos que lidar com uma situação em que o mesmo código de sombreador funcionava de maneira diferente ou não funcionava em placas de vídeo de diferentes fabricantes. Geralmente, isso era "tratado" pela atualização do driver, mas algumas vezes após uma longa depuração era necessário reescrever o código.

Naturalmente, os requisitos para a placa de vídeo também aumentaram. O suporte ao OpenGL 4.5 é uma chave, mas não é o único requisito.
A seguir, apresentamos os resultados da velocidade de renderização durante a rotação da montagem. Lembre-se de que 24 quadros por segundo (fps) são considerados indicadores confortáveis ​​para o olho humano.
A seguir, as medições foram realizadas em um PC com a seguinte configuração:
CPU: Intel Core i7-6700K 4.00 GHz
RAM: 32 Gb
GPU: NVidia Quadro P2000
SO: Microsoft Windows 10 x64 Professional
Tabela 1. Taxa de quadros (quadros por segundo, fps) em vários modelos. Mais é melhor. Modo de exibição: Meio-tom + estrutura de arame, modo simplificado desativado, qualidade de suavização de serrilhado: média (MSAA 8x)
ModeloQuantidade
componentes
Taxa de quadros, fps
V16.1v17.1v18
imagem
Carro
moagem em mosaico
27644.14.7124,9

PGU-410
1083370,30,428,6

Dumper de carro
173421,11.4124,7

Ônibus bonde
97831.92,4124,9

Maré do Norte
estação de poder
484450,30,576,1

Instalação
vácuo tecnológico
71891.92,3124,9

Redutor de navio
usina
64142.63.6.123,9


Adicionando componentes a uma montagem grande


O cenário com a adição de componentes em uma montagem grande acabou evoluindo para o chamado teste complexo, descrito na Tabela 2.

Tabela 2. Cenário com inclusão de componentes em uma montagem grande. Critérios de teste.
CritérioCritério Descrição
Velocidade de abertura de arquivoO componente adicionado à montagem deve ser carregado do disco
Velocidade de renderizaçãoA montagem e o componente inserido devem estar posicionados, para isso você precisa girar / mover / ampliar a imagem
Velocidade de seleção de objetosPara criar posicionamentos, você precisa selecionar os objetos básicos: faces, planos, arestas, etc.
Velocidade de sincronização com a árvore de construçãoO componente adicionado à montagem e suas interfaces devem ser representados na árvore de construção
Velocidade de sincronização do módulo de especificaçãoO componente adicionado ao conjunto deve ser considerado na especificação.

Na tabela, você pode ver os pontos (desenho, abertura), que desde o início foram selecionados como direções separadas de acelerações. Mas as melhorias exigiram outros componentes.

Um tempo significativo foi gasto pela sincronização com uma árvore. Resolvemos o problema implementando uma atualização parcial.

Outra dificuldade foi o impacto significativo da especificação no desempenho do KOMPAS-3D. Em alguns cenários de teste complexos, esse componente foi o principal (50% ou mais).
Especificação
A especificação é o módulo do sistema KOMPAS-3D, responsável pela formação do documento de design com o mesmo nome. É desenvolvido por uma equipe separada.

Em particular, a equipe acelerou a sincronização durante a inserção, redesenhando os mecanismos internos do módulo de especificação.


Alguns resultados


Adicione componentes à montagem "Redutor da usina do navio".


Teste abrangente para a montagem "Redutor de uma usina marítima".
Os números mostram: 1 - suporte, 2 - arruela, 3 - parafusos.

Tabela 3. Tempo de inserção dos componentes em uma montagem grande em segundos. Menos é melhor.
ComponenteAcçãoTempo s
V16.1v17.1v18
Inserir
componente
Suporte

A carregar2.03.02.2
Mudar para o modo de emparelhamento0,60,40,4
Primeiro emparelhamentoSeleção do primeiro objeto0,41,00,2
A escolha do segundo objeto0,51,10,2
Selecione o emparelhamento certo3.83.6.1,0
Segundo emparelhamentoSeleção do primeiro objeto0,51.40,5
A escolha do segundo objeto0,51.40,2
Selecione o emparelhamento certo3.6.3.01,2
Terceiro emparelhamentoSeleção do primeiro objeto0,50,50,5
A escolha do segundo objeto0,31,10,3
Selecione o emparelhamento certo3,73.2.1,1
Confirmar criação de inserção7.85.2.2,3
Inserção total do suporte24,224,610.1
Inserir
anilhas
da biblioteca
padrão
produtos



Primeira seleção de emparelhamento6.42,40,4
Seleção do segundo par4.23,10,4
Confirmar criação de inserção15,79.24.4.
Total para arruelas de inserção26,314,75.2.
Inserir
parafusos

A carregar2.02.72.0
Mudar para o modo de emparelhamento0,50,50,5
Primeiro emparelhamentoSeleção do primeiro objeto0,41,00,2
A escolha do segundo objeto0,41,10,2
Selecione o emparelhamento certo3.4.2.71,0
Segundo emparelhamentoSeleção do primeiro objeto0,41,20,4
A escolha do segundo objeto0,50,50,4
Selecione o emparelhamento certo3,72.91,0
Terceiro emparelhamentoSeleção do primeiro objeto0,51,00,5
A escolha do segundo objeto0,51,00,2
Selecione o emparelhamento certo4.23.91,2
Confirmar criação de inserção32,55,42.2
Total para inserção de parafusos49.21,29,8
A inserção total dos três componentes99,560,525,1


Um teste abrangente pode ser considerado como um dos cenários de edição da montagem (a partir do número de comuns).

Além disso, a reconstrução da montagem acelerou. Agora, se você editar uma operação, a montagem inteira não será completamente reconstruída - apenas os objetos alterados serão atualizados. Para determinar as operações dependentes, ou seja, essas operações, cujo resultado pode ser afetado pelo resultado da operação alterada, é utilizado um algoritmo especial que cria conexões entre operações, corpos e inserções.

Abrir montagens


A idéia principal de aumentar a velocidade da leitura de arquivos é fazer com que o KOMPAS-3D leia apenas o que o usuário precisa no momento.

Por exemplo:

  • leia apenas a execução atual para pastilhas de montagem,
  • para tipos de download, leia apenas as informações necessárias: triangulação ou triangulação + resultados ( B-rep ).

Tudo isso requereu refinamento da estrutura de dados no arquivo para que suas partes individuais pudessem ser lidas.

Anton Sidyakin, programador, líder de equipe:

“Há algum tempo, o arquivo KOMPAS-3D é um arquivo que combina vários arquivos de serviço. Um deles contém dados de modelo / montagem de documentos organizados em uma estrutura em árvore. A capacidade de navegar nessa estrutura já existia. Para leitura parcial, era necessário garantir a independência das partes entre si. Assim, as partes recebidas não deveriam ter se referido, caso contrário, a parte com o link teria se tornado "inferior".

Como resultado, para detalhes, foi possível separar o desempenho do documento e um do outro. Nas montagens, o contêiner para inserções e posicionamentos é destacado separadamente. Dentro das execuções, também foi possível separar os dados iniciais para a construção e os resultados na forma de triangulação e corpos.



Se falamos sobre tipos simplificados de carregamento, a montagem editável é totalmente carregada e apenas triangulação e, dependendo do tipo, representação de limite (B-rep) são carregadas de suas inserções. A exibição de inserções com variáveis ​​externas alteradas nesse modo apresentou algumas dificuldades, uma vez que foram obtidas anteriormente em tempo real mediante a reconstrução durante a leitura e, nos tipos simplificados de carregamento, não há dados para isso. A solução foi anotar os resultados da reconstrução dessas pastilhas na montagem. Isso deu aceleração e devido à falta de reconstrução.

A divisão descrita do documento em peças permitiu carregar na montagem apenas os desempenhos selecionados nas inserções.
Além de acelerar a abertura de arquivos, a leitura parcial também ajudou a reduzir os recursos consumidos - principalmente a RAM.

Com base nas melhorias, apareceu um novo tipo de carregamento de montagem - “Parcial”. Nesse tipo de carregamento, apenas os resultados (corpos, superfícies) e triangulação são subtraídos do arquivo. O carregamento parcial permite criar pares e é próximo em termos de funcionalidade ao carregamento completo dos componentes.

Após implementar melhorias na leitura parcial, a criação de tipos de carregamento personalizados se torna promissora.

Sugestão
Tipos de inicialização personalizados são combinações de métodos do sistema para carregar um componente. Essa função não é nova, mas as melhorias feitas na v18 permitem que você obtenha bônus significativos por seu uso.


Para componentes que não são importantes para futuras compilações, o tipo de carga "Vazio" pode ser aplicado. Estes podem ser componentes escondidos dentro de outros ("vnutryanka"). Na v18, componentes (e montagens inteiras) com o tipo de inicialização "Vazio" são abertos quase instantaneamente.

Tabela 4. Tempo de abertura para montagens com os tipos de inicialização “Vazio” e “Dimensão” em segundos. Menos é melhor.
ModeloTipo de DownloadHorário de abertura, s
V16.1v17.1v18

Instalação
vácuo tecnológico
Vazio12,811,72,5
Tamanho21,220,82.6

Redutor de navio
usina
Vazio31,015,97.2
Tamanho371,5114,87.3


Os componentes restantes, necessários para entender a aparência do produto ou serão usados ​​como objetos de suporte para futuras construções, podem ser carregados “Cheio” ou “Parcialmente”.

Como uma ferramenta para preparar tipos de inicialização personalizados, você pode usar novos comandos para selecionar componentes "invisíveis". Aplicamos o comando e, em seguida, usamos o menu de contexto para alterar o tipo de carregamento dos componentes selecionados para "Vazio".

Projeção


Ao acelerar a projeção, nos perguntamos a questão de filtrar os dados recebidos na entrada do núcleo matemático.

Em primeiro lugar, decidimos filtrar componentes / corpos invisíveis. Para esse propósito, foi utilizado o mecanismo de seleção de oclusão - permite descobrir se o corpo que será projetado é visível ou se fecha e se encontra dentro de outro corpo. Esta operação é realizada na lateral da placa de vídeo.

O maior efeito será ao criar projeções de modelos com um grande número de componentes ocultos em volumes fechados, por exemplo:

  • acionamentos complexos, caixas de engrenagens etc.,
  • veículos
  • edifícios
  • armários com equipamentos elétricos.

Para inclusão, a opção "Projeção aproximada" é responsável. O nome não é acidental - peças relativamente pequenas (por exemplo, um parafuso na escala de uma usina) podem não ser projetadas em uma escala de montagem. Para muitos usuários, esse estado de coisas será adequado, especialmente no caso de criação de desenhos dimensionais e desenhos gerais.

Leia mais sobre a opção Projeção aproximada.
A opção está disponível apenas para projeções padrão. Para especificar imagens (seções, seções, vistas remotas) "Projeção aproximada" não está envolvida.


Mesmo sem usar esta opção, a projeção é visivelmente mais rápida em comparação com a V16 e v17. Isso foi ajudado por melhorias do lado do núcleo matemático.

Tabela 5. Hora de criar três projeções padrão em segundos. Menos é melhor.
ModeloHora de criar três projeções padrão, s
V16.1v17.1v18
Incluído
rascunho
projeção
v18
Desligado
rascunho
projeção

Instalação
vácuo tecnológico
124,147,512,934,6

Redutor de navio
usina
25641038,454,4

Multiuso
unificado
corpo da caixa
99,9123,444,953,5


Também na v18, foi implementada a possibilidade de reconstruir espécies associativas individuais.

Em um desenho que contém muitas vistas associativas, o usuário tem a oportunidade de reconstruir vistas irrelevantes individuais. Por exemplo, aquele ao qual ele deseja adicionar anotações. Você também pode especificar as vistas criadas com a opção Projeção aproximada ativada.

Reconstruir uma única visualização


Esse recurso não se aplica a acelerações explícitas, mas permite que o usuário economize tempo.

O resultado do trabalho realizado para acelerar a projeção do modelo de instalação tecnológica a vácuo no desenho:


Na próxima parte, descreveremos como aceleramos o cálculo das características de centralização em massa (MTC), sobre a contribuição do núcleo geométrico do c3dlabs para o desempenho do COMPAS-3D, alterações no C3D Modeler e também sobre qual hardware é adequado para a v18.

Source: https://habr.com/ru/post/pt447516/


All Articles