Thread View: pl.comp.lang.c
2 messages
2 total messages
Started by Maciek
Sun, 13 Aug 2017 16:19
typ __m256 i rejestry procesora
Author: Maciek
Date: Sun, 13 Aug 2017 16:19
Date: Sun, 13 Aug 2017 16:19
33 lines
2503 bytes
2503 bytes
Hej!
Mam pytanie. W disasemblerze widzę, że typ __m256 operuje na rejestrach ymm, w związku z czym mam pytanie - które to jest rozszerzenie procesora ? xmmX to rejestry sse natomiast nie wiem które rozszerzenie operuje na rejestrach ymm, krótki przykład:
#include <iostream>
#include <future>
int main()
{
int a[4] = { 1, 2, 3, 4 }, b[4] = { 4, 3, 2, 1 }, result[4] = { 0, 0, 0, 0 };
__m256 *aa, *bb, *cc;
aa = (__m256*)a;
bb = (__m256*)b;
cc = (__m256*)result;
*cc = _mm256_add_ps(*aa, *bb);
std::cout << "RESULT: " << result[0] << ", " << result[1] << ", " << result[2] << ", " << result[3] << std::endl;
return 0;
}
W oknie disasemblera mam:
003F24B0 mov eax,dword ptr [bb]
003F24B3 mov ecx,dword ptr [aa]
003F24B6 vmovups ymm0,ymmword ptr [ecx]
003F24BA vaddps ymm0,ymm0,ymmword ptr [eax]
003F24BE vmovups ymmword ptr [ebp-160h],ymm0
003F24C6 mov edx,dword ptr [cc]
003F24C9 vmovups ymm0,ymmword ptr [ebp-160h]
003F24D1 vmovups ymmword ptr [edx],ymm0
Pozdrawiam, i dzięki za odpowiedź ewentualnie wskazówki.
PS. Czy to rozszerzenie jest na różnych architekturach ??
Re: typ __m256 i rejestry procesora
Author: Maciek
Date: Sun, 13 Aug 2017 16:42
Date: Sun, 13 Aug 2017 16:42
37 lines
2944 bytes
2944 bytes
W dniu niedziela, 13 sierpnia 2017 18:19:10 UTC+2 użytkownik Maciek napisał:
> Hej!
> Mam pytanie. W disasemblerze widzę, że typ __m256 operuje na rejestrach ymm, w związku z czym mam pytanie - które to jest rozszerzenie procesora ? xmmX to rejestry sse natomiast nie wiem które rozszerzenie operuje na rejestrach ymm, krótki przykład:
>
> #include <iostream>
> #include <future>
>
> int main()
> {
> int a[4] = { 1, 2, 3, 4 }, b[4] = { 4, 3, 2, 1 }, result[4] = { 0, 0, 0, 0 };
> __m256 *aa, *bb, *cc;
> aa = (__m256*)a;
> bb = (__m256*)b;
> cc = (__m256*)result;
> *cc = _mm256_add_ps(*aa, *bb);
> std::cout << "RESULT: " << result[0] << ", " << result[1] << ", " << result[2] << ", " << result[3] << std::endl;
> return 0;
> }
>
> W oknie disasemblera mam:
>
> 003F24B0 mov eax,dword ptr [bb]
> 003F24B3 mov ecx,dword ptr [aa]
> 003F24B6 vmovups ymm0,ymmword ptr [ecx]
> 003F24BA vaddps ymm0,ymm0,ymmword ptr [eax]
> 003F24BE vmovups ymmword ptr [ebp-160h],ymm0
> 003F24C6 mov edx,dword ptr [cc]
> 003F24C9 vmovups ymm0,ymmword ptr [ebp-160h]
> 003F24D1 vmovups ymmword ptr [edx],ymm0
>
>
> Pozdrawiam, i dzięki za odpowiedź ewentualnie wskazówki.
>
> PS. Czy to rozszerzenie jest na różnych architekturach ??
OK. Już wiem:
https://pl.wikipedia.org/wiki/Advanced_Vector_Extensions
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads