저는 어셈블리가 매우 새롭고 1에서 100까지의 범위에서 모든 pythagorean 트리플을 찾고 싶습니다. C로 모든 숫자를 생성하고 있으며 다른 모든 계산은 어셈블리 SSE에서 수행해야합니다. sqrt 명령을 사용하여이 작업을 수행하려고했으나 (모두 시도했지만) 작동하지 못했습니다. 누군가 어떻게 수행해야하는지 알려 줄 수 있습니까?SSE 조립 지침을 사용하여 pythagorean 트리플을 찾는 방법은 무엇입니까?
int main(){
for (int i = 1; i <= 100; i++)
{
a++;
if (a > 100)
a = 0;
for (int j = 1; j <= 100; j++)
{
b++;
if (b > 100)
b = a;
_asm //tricky part begins here:
{
movups xmm0, a
movups xmm1, b
pmuludq xmm0, xmm0
pmuludq xmm1, xmm1
//movups xmm2, 0
//paddd xmm2, xmm0
//paddd xmm2, xmm1
movups z, xmm0
}
printf("%d\n", z);
}
}
}
"C보다 빠르기 때문에 어셈블리에서이 작업을 수행하고 싶습니다." 어떻게 알았어? 아마 그렇지 않을 것이기 때문입니다. –
필자의 손으로 작성한 asm은 C 컴파일러 출력보다 빠르다고 가정하지 않습니다. 컴파일러는 똑똑하고 현대적인 CPU는 복잡합니다. – Blorgbeard
알고리즘을 C 또는 의사 코드로 먼저 적어 둡니다. – Jester