Mais vezes do que verdadeira e ele rearranjar? o

  • No School
  • AA 1
  • 105

This preview shows page 92 - 94 out of 105 pages.

mais vezes do que verdadeira e ele rearranjará o teste da comparação de forma tal que a rotina continue tão rápida 30 Se você for curioso o bastante notará que os prefixos para os seletores CS e DS são os mesmos... 0x2E para CS e 0x3E para DS. Quando você usa uma referência do tipo [ds:rip], numa instrução, ela é prefixada com 0x3E. Mas prefixar um label com CS ou DS, em assembly, não é possível com instruções de salto condicional! 84
Image of page 92
quanto possível. Outro exemplo é o uso de if..then..else : if (cond) do_something(); eles do_something_else(); O compilador provavelmente fará algo assim: cmp dword [cond],0 jne .L1 call do_something jmp .L2 .L1: call do_something_else .L2: Se o compilador tenta sempre fazer com que saltos condicionais “para frente” não sejam tomados, isso significa que o teste de cond é assumido como verdadeiro na maioria das vezes (e JNE não consumirá um ciclo extra por causa do branch prediction ). Lembre-se que JMP não sofre as penalidades das previsões de salto... Acontece que podemos querer que o compilador assuma que a condição é falsa na maioria das vezes. Poderíamos fazer isso de duas formas: 1. Mudando a ordem do bloco then e eles e o teste de cond para !cond ; 2. Usando __builtin_expect(cond,0) na condição do if . Quantos mais dados você manipular, pior a performance Essa dica parece óbvia. Afinal, se você percorrer um array com 10 itens vai gastar tempo num fator 10 vezes maior que se você lidasse com apenas uma variável... Se percorrer 100 mil itens, o tempo gasto será 1000 vezes maior do que se lidasse com apenas 10 e assim por diante. Mas, não é sobre isso que estou falando... O problema aqui é que esses arrays precisam estar armazenados na memória. Eles não podem ser contidos num registrador, por exemplo, e acesso à memória é lento! Os processadores modernos tentam mitigar esse delay de acesso à memória mantendo parte dela numa memória mais rápida no interior do processador, chamada de cache . Só que os caches (existem mais que um!) tem capacidade limitada e a mecânica de acesso a esses dados internos não é somente através de um endereço. Isto é, a forma com que os caches são organizados é mais complicada. Como regra geral, estamos mais interessados no cache de primeiro nível (o cache L1), que está atrelado mais intimamente com as unidades de execução do processador. Mas, o que se aplica ao cache L1, aplica-se ao cache L2 e L3 também, mas de uma maneira um pouco diferente... O cache L1 geralmente é organizado em blocos de 64 bytes. Não é possível lidar com blocos menores do que esse tamnho, no que concerne o cache... Isso significa que sempre que uma porção da memória RAM é transferida para o cache, essa porção terá sempre o tamanho de 64 bytes. Outro fato digno de nota é que o cache L1 é composto de, no máximo, 256 linhas. Isso nos dá, no máximo 16 KiB de RAM que podem estar copiadas no cache.
Image of page 93
Image of page 94

You've reached the end of your free preview.

Want to read all 105 pages?

  • Fall '19

What students are saying

  • Left Quote Icon

    As a current student on this bumpy collegiate pathway, I stumbled upon Course Hero, where I can find study resources for nearly all my courses, get online help from tutors 24/7, and even share my old projects, papers, and lecture notes with other students.

    Student Picture

    Kiran Temple University Fox School of Business ‘17, Course Hero Intern

  • Left Quote Icon

    I cannot even describe how much Course Hero helped me this summer. It’s truly become something I can always rely on and help me. In the end, I was not only able to survive summer classes, but I was able to thrive thanks to Course Hero.

    Student Picture

    Dana University of Pennsylvania ‘17, Course Hero Intern

  • Left Quote Icon

    The ability to access any university’s resources through Course Hero proved invaluable in my case. I was behind on Tulane coursework and actually used UCLA’s materials to help me move forward and get everything together on time.

    Student Picture

    Jill Tulane University ‘16, Course Hero Intern

Stuck? We have tutors online 24/7 who can help you get unstuck.
A+ icon
Ask Expert Tutors You can ask You can ask You can ask (will expire )
Answers in as fast as 15 minutes