일부 int64 산술 연산에 대한 최적화를 시도하고 있습니다. 오른쪽 및 왼쪽 교대, 나누기, 나머지 및 모든 opoe와 같은 작업을 수행해야합니다. 모든 SSE 내장 함수를 검색 했으므로 아무 것도 발견하지 못했습니다. 왼쪽 교대는 음의 값으로 잘 작동하지 않습니다. Pls는 나를 안내 할 수 있습니까 ??SSE int64 내장 함수
코드의 일부가 (인텔 I7에) 표시됩니다 :
u_a2b2=(MatrixAiB1[0]>>2*z_bits);
res_ri=(MatrixAiB1[0] % (__int64(1)<<2*z_bits));
if (MatrixAiB1[0] >= 0)
{
if (abs(res_ri) > (__int64(1)<<41))
{
u_a2b2=u_a2b2+1;
}
}
else
{
if (abs(res_ri) < (__int64(1)<<41))
{
if (u_a2b2>=0)
{
u_a2b2=u_a2b2-1;
}
else
{
u_a2b2=u_a2b2+1;
}
}
}
모든 것이
감사
안녕하세요. 서면으로 귀하의 질문은 조금 번쩍입니다. 당신이 원하는 한 가지 일을 시도하는 완전하고 그러나 최소한의 프로그램을 게시 할 수 있다면 그것이 도움이 될 것입니다. –
달성하고자하는 목표와 개선하려는 목표를 명확히 구분하는 것이 멀습니다. 코드 자체는 배열이나 그런 식으로 작동하지 않는 것 같습니다. 따라서 64 비트 빌드 코드의 경우 SSE 명령어의 도움이 전혀 없습니다. (대개 속도가 느려질 수 있습니다). 32 비트 빌드의 경우 SSE 명령은 교대로 약간 더 빠를 수 있습니다 (나누기 또는 모듈로는 동일한 속도입니다. 어려운 부분은 실제 나누기이므로 동일한 나누기 단위에서 발생합니다. SSE 또는 "보통"지시). –
어쨌든 SSE에는 정수 나머지 (또는 심지어 정수 나누기)가 없습니다. – harold