public inbox for devel@edk2.groups.io
 help / color / mirror / Atom feed
From: Andrew Fish <afish@apple.com>
To: Amit kumar <akamit91@hotmail.com>
Cc: Mike Kinney <michael.d.kinney@intel.com>,
	"edk2-devel@lists.01.org" <edk2-devel@lists.01.org>
Subject: Re: Accessing AVX/AVX2 instruction in UEFI.
Date: Thu, 04 May 2017 04:32:55 -0700	[thread overview]
Message-ID: <A7CFC388-6EB6-4B22-AB62-BCA7C3E1EF59@apple.com> (raw)
In-Reply-To: <MWHPR11MB1822641F8A4F432B7598B2CCDCEA0@MWHPR11MB1822.namprd11.prod.outlook.com>


> On May 4, 2017, at 4:13 AM, Amit kumar <akamit91@hotmail.com> wrote:
> 
> Hi,
> 
> 
> Even after using AVX2 instruction my code shown no performance improvement in UEFI although there is substantial improvement when i run the similar code in windows .
> 
> Am i missing something ?
> 

Is the data aligned the same in both environments?

Thanks,

Andrew Fish

> Using MSVC compiler and the codes written in ASM.
> 
> Thanks And Regards
> 
> Amit
> 
> ________________________________
> From: edk2-devel <edk2-devel-bounces@lists.01.org> on behalf of Amit kumar <akamit91@hotmail.com>
> Sent: Wednesday, May 3, 2017 11:18:39 AM
> To: Kinney, Michael D; Andrew Fish
> Cc: edk2-devel@lists.01.org
> Subject: Re: [edk2] Accessing AVX/AVX2 instruction in UEFI.
> 
> Thank you Michael and Andrew
> 
> 
> Regards
> 
> Amit
> 
> ________________________________
> From: Kinney, Michael D <michael.d.kinney@intel.com>
> Sent: Tuesday, May 2, 2017 10:33:45 PM
> To: Andrew Fish; Amit kumar; Kinney, Michael D
> Cc: edk2-devel@lists.01.org
> Subject: RE: [edk2] Accessing AVX/AVX2 instruction in UEFI.
> 
> Amit,
> 
> The information from Andrew is correct.
> 
> The document that covers this topic is the
> Intel(r) 64 and IA-32 Architectures Software Developer Manuals
> 
> https://software.intel.com/en-us/articles/intel-sdm
> 
> Volume 1, Section 13.5.3 describes the AVX State.  There are
> More details about detecting and enabling different AVX features
> in that document.
> 
> If the CPU supports AVX, then the basic assembly instructions
> required to use AVX instructions are the following that sets
> bits 0, 1, 2 of XCR0.
> 
>    mov     rcx, 0
>    xgetbv
>    or      rax, 0007h
>    xsetbv
> 
> One additional item you need to be aware of is that UEFI firmware only
> saves/Restores CPU registers required for the UEFI ABI calling convention
> when a timer interrupt or exception is processed.
> 
> This means CPU state such as the YMM registers are not saved/restored
> across an interrupt and may be modified if code in interrupt context
> also uses YMM registers.
> 
> When you enable the use of extended registers, interrupts should be
> saved/disabled and restored around the extended register usage.
> 
> You can use the following functions from MdePkg BaseLib to do this
> 
> /**
>  Disables CPU interrupts and returns the interrupt state prior to the disable
>  operation.
> 
>  @retval TRUE  CPU interrupts were enabled on entry to this call.
>  @retval FALSE CPU interrupts were disabled on entry to this call.
> 
> **/
> BOOLEAN
> EFIAPI
> SaveAndDisableInterrupts (
>  VOID
>  );
> 
> /**
>  Set the current CPU interrupt state.
> 
>  Sets the current CPU interrupt state to the state specified by
>  InterruptState. If InterruptState is TRUE, then interrupts are enabled. If
>  InterruptState is FALSE, then interrupts are disabled. InterruptState is
>  returned.
> 
>  @param  InterruptState  TRUE if interrupts should enabled. FALSE if
>                          interrupts should be disabled.
> 
>  @return InterruptState
> 
> **/
> BOOLEAN
> EFIAPI
> SetInterruptState (
>  IN      BOOLEAN                   InterruptState
>  );
> 
> Algorithm:
> ============
> {
>  BOOLEAN  InterruptState;
> 
>  InterruptState = SaveAndDisableInterrupts();
> 
>  // Enable use of AVX/AVX2 instructions
> 
>  // Use AVX/AVX2 instructions
> 
>  SetInterruptState (InterruptState);
> }
> 
> Best regards,
> 
> Mike
> 
>> -----Original Message-----
>> From: edk2-devel [mailto:edk2-devel-bounces@lists.01.org] On Behalf Of Andrew Fish
>> Sent: Tuesday, May 2, 2017 8:12 AM
>> To: Amit kumar <akamit91@hotmail.com>
>> Cc: edk2-devel@lists.01.org
>> Subject: Re: [edk2] Accessing AVX/AVX2 instruction in UEFI.
>> 
>> 
>>> On May 2, 2017, at 6:57 AM, Amit kumar <akamit91@hotmail.com> wrote:
>>> 
>>> Hi,
>>> 
>>> Am trying to optimize an application using AVX/AVX2, but my code hangs while trying
>> to access YMM registers.
>>> The instruction where my code hangs is :
>>> 
>>> 
>>> vmovups ymm0, YMMWORD PTR [rax]
>>> 
>>> 
>>> I have verified the cpuid in OS and it supports AVX and AVX2 instruction. Processor
>> i7 6th gen.
>>> Can somebody help me out here ? Is there a way to enable YMM registers ?
>>> 
>> 
>> Amit,
>> 
>> I think these instructions will generate an illegal instruction fault until you enable
>> AVX. You need to check the Cpu ID bits in your code, then write BIT18 of CR4. After
>> that XGETBV/XSETBV instructions are enabled and you can or in the lower 2 bits of
>> XCR0. This basic operation is in the Intel Docs, it is just hard to find. Usually the
>> OS has done this for the programmer and all the code needs to do is check the CPU ID.
>> 
>> Thanks,
>> 
>> Andrew Fish
>> 
>>> 
>>> Thanks And Regards
>>> Amit Kumar
>>> 
>>> _______________________________________________
>>> edk2-devel mailing list
>>> edk2-devel@lists.01.org
>>> https://lists.01.org/mailman/listinfo/edk2-devel
>> 
>> _______________________________________________
>> edk2-devel mailing list
>> edk2-devel@lists.01.org
>> https://lists.01.org/mailman/listinfo/edk2-devel
> _______________________________________________
> edk2-devel mailing list
> edk2-devel@lists.01.org
> https://lists.01.org/mailman/listinfo/edk2-devel
> _______________________________________________
> edk2-devel mailing list
> edk2-devel@lists.01.org
> https://lists.01.org/mailman/listinfo/edk2-devel



  reply	other threads:[~2017-05-04 11:32 UTC|newest]

Thread overview: 11+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-05-02 13:57 Accessing AVX/AVX2 instruction in UEFI Amit kumar
2017-05-02 15:12 ` Andrew Fish
2017-05-02 17:03   ` Kinney, Michael D
2017-05-03  5:48     ` Amit kumar
2017-05-04 11:13       ` Amit kumar
2017-05-04 11:32         ` Andrew Fish [this message]
2017-05-04 12:18           ` Amit kumar
2017-05-04 12:22             ` Amit kumar
2017-05-04 15:20               ` Andrew Fish
2017-05-04 17:26                 ` Kinney, Michael D
2017-05-05 13:08                   ` Amit kumar

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-list from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=A7CFC388-6EB6-4B22-AB62-BCA7C3E1EF59@apple.com \
    --to=devel@edk2.groups.io \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox