Here are the compiler flags [BuildOptions] MSFT:DEBUG_*_*_CC_FLAGS = /Od /FAsc /GL- MSFT:RELEASE_*_*_CC_FLAGS = /FAsc /D MDEPKG_NDEBUG MSFT:RELEASE_*_*_DLINK_FLAGS = /BASE:0x10000 /ALIGN:4096 /FILEALIGN:4096
________________________________ From: Amit kumar <akami...@hotmail.com> Sent: Thursday, May 4, 2017 5:48:11 PM To: Andrew Fish Cc: Mike Kinney; edk2-devel@lists.01.org Subject: Re: [edk2] Accessing AVX/AVX2 instruction in UEFI. Yes am aligning the data at 32 byte boundary while allocating memory in both environments. in windows using _alligned_malloc(size,32); in UEFI Offset = (UINTN)src & 0xFF; src = (CHAR8 *)((UINTN) src - Offset + 0x20); Thanks Amit ________________________________ From: af...@apple.com <af...@apple.com> on behalf of Andrew Fish <af...@apple.com> Sent: Thursday, May 4, 2017 5:02:55 PM To: Amit kumar Cc: Mike Kinney; edk2-devel@lists.01.org Subject: Re: [edk2] Accessing AVX/AVX2 instruction in UEFI. > On May 4, 2017, at 4:13 AM, Amit kumar <akami...@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-boun...@lists.01.org> on behalf of Amit kumar > <akami...@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.kin...@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-boun...@lists.01.org] On Behalf Of >> Andrew Fish >> Sent: Tuesday, May 2, 2017 8:12 AM >> To: Amit kumar <akami...@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 <akami...@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 _______________________________________________ edk2-devel mailing list edk2-devel@lists.01.org https://lists.01.org/mailman/listinfo/edk2-devel