Recentemente, você se interessou por uma área de estudos chamada Digital Twins. Digital Twins (ou Gêmeos Digitais) é uma área da computação que busca criar réplicas virtuais de objetos, sistemas ou processos do mundo real. A ideia é que essas réplicas sejam o mais fiéis possível à realidade, permitindo testar, monitorar e prever o comportamento desses objetos sem precisar mexer com o físico de verdade.
Essa área é muito usada em conjunto com a engenharia para simular máquinas e criar objetos virtualmente. Isso permite à empresa fabricante conseguir detectar possíveis problemas antes de se comprometer financeiramente e produzir equipamento defeituoso.
Sabendo disso, você decide criar um Digital Twin de um dos equipamentos mais em demanda hoje em dia: uma placa de vídeo.
Para isso, implemente a struct GPU em C. A struct deve conter os seguintes parâmetros: nome do fabricante, base clock (em MHz), quantidade de VRAM (em GB), e consumo de energia (em Watts).
Pesquise sobre uma GPU que você ache interessante, obtenha as informações acima no site do fabricante e crie um Digital Twin da GPU.
Depois, implemente a função compare() que recebe duas GPUs como parâmetros e printa na tela qual das GPUs é a mais forte. Para simplificação, cada atributo da GPU tem um peso na hora de definir o score.
A comparação é feita com o seguinte pseudo-código:
void compare(GPU gpu1, GPU gpu2)
{
scoreGPU1 = gpu1.baseClock * 0.001 + 100/gpu1.consumoEnergia + gpu1.vram * 0.1
scoreGPU2 = gpu2.baseClock * 0.001 + 100/gpu2.consumoEnergia + gpu2.vram * 0.1
if scoreGPU1 > scoreGPU2
{
printf("GPU 1 é mais forte!")
}
else
{
printf("GPU 2 é mais forte!")
}
}
void compare(GPU gpu1, GPU gpu2)
{
scoreGPU1 = gpu1.baseClock * 0.001 + 100/gpu1.consumoEnergia + gpu1.vram * 0.1
scoreGPU2 = gpu2.baseClock * 0.001 + 100/gpu2.consumoEnergia + gpu2.vram * 0.1
if scoreGPU1 > scoreGPU2
{
printf("GPU 1 é mais forte!")
}
else
{
printf("GPU 2 é mais forte!")
}
}
Passo 1
Estamos criando um “Digital Twin” de uma GPU em C. O objetivo é definir uma
struct GPU
com os campos: nome do fabricante, baseClock
(MHz), vram
(GB) e consumoEnergia
(Watts). Em seguida, vamos instanciar duas GPUs reais (pesquisadas nos sites dos fabricantes) e implementar a função compare()
que calcula um score simplificado para cada GPU e imprime qual é a mais forte.Passo 2
Definimos a
struct GPU
em C. Usamos um array de char
para o nome do fabricante e inteiros para os outros campos:#include <stdio.h>
typedef struct {
char fabricante[50];
int baseClock; // em MHz
int vram; // em GB
int consumoEnergia; // em Watts
} GPU;
Passo 3
Pesquisamos dois modelos de GPU:
- NVIDIA GeForce RTX
: base clock de MHz, GB de VRAM e consumo de W. - AMD Radeon RX
XT: base clock de MHz, GB de VRAM e consumo de W.
E criamos duas variáveis:
GPU gpu1 = {"NVIDIA GeForce RTX 3080", 1440, 10, 320};
GPU gpu2 = {"AMD Radeon RX 6800 XT", 1825, 16, 300};
Passo 4
Implementamos a função
compare()
segundo o pseudo-código dado. Cada GPU recebe um score:E comparamos:
void compare(GPU gpu1, GPU gpu2)
{
double score1 = gpu1.baseClock * (0.001) + 100.0 / gpu1.consumoEnergia
+ gpu1.vram * 0.1;
double score2 = gpu2.baseClock * (0.001) + 100.0 / gpu2.consumoEnergia
+ gpu2.vram * 0.1;
if (score1 > score2) {
printf("GPU 1 (%s) é mais forte!\n", gpu1.fabricante);
} else {
printf("GPU 2 (%s) é mais forte!\n", gpu2.fabricante);
}
}
Passo 5
Chamamos
compare()
no main()
para efetuar a comparação:int main()
{
compare(gpu1, gpu2);
return 0;
}
Resposta
#include <stdio.h>
typedef struct {
char fabricante[50];
int baseClock; // em MHz
int vram; // em GB
int consumoEnergia; // em Watts
} GPU;
void compare(GPU gpu1, GPU gpu2)
{
double score1 = gpu1.baseClock * (0.001) + 100.0 / gpu1.consumoEnergia
+ gpu1.vram * 0.1;
double score2 = gpu2.baseClock * (0.001) + 100.0 / gpu2.consumoEnergia
+ gpu2.vram * 0.1;
if (score1 > score2) {
printf("GPU 1 (%s) é mais forte!\n", gpu1.fabricante);
} else {
printf("GPU 2 (%s) é mais forte!\n", gpu2.fabricante);
}
}
int main()
{
GPU gpu1 = {"NVIDIA GeForce RTX 3080", 1440, 10, 320};
GPU gpu2 = {"AMD Radeon RX 6800 XT", 1825, 16, 300};
compare(gpu1, gpu2);
return 0;
}