마스킹 벡터에 대한 조립 구문 인텔 AVX-512 지침
-
21-12-2019 - |
문제
테스트 목적으로 ICC 인라인 어셈블러가있는 Intel의 Xeon PHI 용 짧은 조립 스 니펫을 쓰고 있습니다.이제는 마스크 된 벡터 지침을 사용하고 싶었지만 인라인 어셈블러에이를 먹이는 데 실패했습니다.
다음과 같은 코드 :
vmovapd -64(%%r14, %%r10), %%zmm0{%%k1}
.
오류 메시지가 나타납니다
/tmp/icpc5115IWas_.s: Assembler messages:
/tmp/icpc5115IWas_.s:563: Error: junk `%k1' after register
.
나는 많은 다른 조합을 시도했지만 아무 일도 일하지 않았습니다.컴파일러 버전은 Linux에서의 Intel64 / 13.1up03이며 가스 구문을 사용합니다.
편집 : 위의 코드는 실제로 비 확장 어셈블러에서 작동합니다.그래서 :
__asm__("vmovapd -64(%r14, %r10), %zmm0{%k1} ")
.
는 작동하지 않지만 다음은 다음과 같습니다.
__asm__("vmovapd -64(%[src], %%r10), %%zmm0{%%k1} "
:
: [src]"r"(src)
:)
.
확장 모드에서 등록 이름을 등록하기 전에 이중 %를 사용할 필요성을 가지고있는 것이 뭔가가 있습니다.그러나 k의 단일 %가 작동하지 않습니다.
해결책
INTEL Developer Zone http ://software.intel.com/en-us/forums/topic/499145#Comment/499145#Comment-1776563 답변은 확장 된 인라인 어셈블러에서 Xeon Phi의 마스크 레지스터를 사용하기 위해서는 다음을 수행해야합니다.마스크 레지스터 수정 자 둘레 주위에 두 번 중괄호를 사용하십시오.
vmovapd %%zmm30, (%%r15, %%r10){{%%k1}}
. 다른 팁
명령의 가면의 변형을 사용해야한다고 생각합니다. vmaskmovpd
제휴하지 않습니다 StackOverflow