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!")
    }
}

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 3080: base clock de 1440 MHz, 10 GB de VRAM e consumo de 320 W.
  • AMD Radeon RX 6800 XT: base clock de 1825 MHz, 16 GB de VRAM e consumo de 300 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:
score = baseClock times 0,001 + 100consumoEnergia + vram times 0,1
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;
}

Exercícios relacionados