1
resposta

[Dúvida] Seria algum erro que estou causando? Para saber mais: Programas cache-friendly

Para ver isso funcionando na prática, acesse o código no GitHub(https://gist.github.com/AndrewIjano/5a46dfd50693dd2d198266b0f864b738) e execute aqui (https://cpp.sh/). Neste passo ocorre o seguinte resultado;

(main.cpp:2:2: Erro: diretiva de pré-processamento inválida
#incluir <iostream>
 ^
main.cpp:3:2: Erro: diretiva de pré-processamento inválida
#incluir <corda>
 ^
main.cpp:4:2: Erro: diretiva de pré-processamento inválida
#incluir <crono> 
 ^
main.cpp:5:2: Erro: diretiva de pré-processamento inválida
#incluir <vetor> 
 ^
main.cpp:8:1: erro: nome de tipo desconhecido 'Usando'
Usando o namespace STD;

main.cpp:8:9: erro: esperado ';' após o declarador de nível superior
Usando o namespace STD;
 ^
 ;
main.cpp:9:1: erro: nome de tipo desconhecido 'Usando'
Usando o namespace std::chrono;
^
main.cpp:9:9: erro: esperado ';' após o declarador de nível superior
Usando o namespace std::chrono;
 ^
 ;
main.cpp:13:2: Erro: diretiva de pré-processamento inválida
#Definir comeca_contagem high_resolution_clock::Agora
 ^
main.cpp:14:2: Erro: diretiva de pré-processamento inválida
#Definir duracao(a) duration_cast<milissegundos>(a).count()
 ^
main.cpp:15:2: Erro: diretiva de pré-processamento inválida
#Definir finaliza_contagem a) duracao(comeca_contagem() - a)
 ^
main.cpp:16:2: Erro: diretiva de pré-processamento inválida
#Definir imprime_tempo(a, b) cout << a << b << " ms" << endl
 ^
main.cpp:22:16: erro: esperado ';' após a expressão
 vector<int> lista(n*n);
 ^
 ;
main.cpp:22:5: erro: uso do identificador não declarado 'vetor'
 vector<int> lista(n*n);
 ^
main.cpp:22:17: Erro: uso do identificador não declarado 'lista'
 vector<int> lista(n*n);
 ^
main.cpp:27:21: erro: uso do identificador não declarado 'comeca_contagem'
 auto inicio_1 = comeca_contagem();
 ^
main.cpp:29:15: erro: esperado '(' para construção de tipo ou molde de estilo de função
 para (int i = 0; i < n; i++) {
 ~~~ ^
main.cpp:38:40: erro: uso do identificador não declarado 'tempo_1'
 imprime_tempo("Tempo com cache: ", tempo_1);
 ^
main.cpp:43:21: Erro: uso do identificador não declarado 'comeca_contagem'
 auto inicio_2 = comeca_contagem();
 ^
Erro fatal: muitos erros emitidos, parando agora [-ferror-limit=]
20 erros gerados. )
                    

Como o resultado não conferia com a imagem fiz a busca no fórum onde tinha um comentário com outro compilador e o erro persistiu; (https://www.onlinegdb.com/online_c++_compiler)

Seria algum erro que estou causando?

1 resposta

Olá Rodrigo! Tudo bem contigo?

Pelo que pude analisar, o erro que você está encontrando ao compilar o código é devido a erros de sintaxe. Parece que você está usando as diretivas de pré-processamento "#incluir" ao invés de "#include" para incluir as bibliotecas necessárias.

Além disso, você está usando "Usando" ao invés de "using" para declarar o namespace STD. E também está usando "#Definir" ao invés de "#define" para definir as macros.

Aqui está uma versão corrigida do código:

#include <iostream>
#include <string>
#include <chrono>
#include <vector>

using namespace std;

#define comeca_contagem chrono::high_resolution_clock::now
#define duracao(a) chrono::duration_cast<chrono::milliseconds>(a).count()
#define finaliza_contagem(a) duracao(comeca_contagem() - a)
#define imprime_tempo(a, b) cout << a << b << " ms" << endl

int main() {
    int n = 10000;
    vector<int> lista(n*n);

    auto inicio_1 = comeca_contagem();
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < n; j++) {
            lista[i*n + j] = i + j;
        }
    }
    auto tempo_1 = finaliza_contagem(inicio_1);

    auto inicio_2 = comeca_contagem();
    for (int j = 0; j < n; j++) {
        for (int i = 0; i < n; i++) {
            lista[i*n + j] = i + j;
        }
    }
    auto tempo_2 = finaliza_contagem(inicio_2);

    imprime_tempo("Tempo com cache: ", tempo_1);
    imprime_tempo("Tempo sem cache: ", tempo_2);

    return 0;
}

E se você já tiver resolvido o problema, peço que compartilhe a solução.

Se você tiver mais alguma dúvida, é só me dizer.

Espero ter ajudado e bons estudos!