[Date Prev][Date Next][Thread Prev][Thread Next]
[Date Index]
[Thread Index]
- Subject: Re: Why do you want to use“cast_int“ to force “ui” to int
- From: game frog <froggame505384662@...>
- Date: Sat, 21 Jan 2023 02:01:59 +0800
so , In the case of positive integers, SDIV is indeed faster than UDIV
Is it because 64 bits unsigned int to int and the number of bits
becomes less?
So the divider faster~~
game frog <froggame505384662@gmail.com> 于2023年1月21日周六 01:53写道:
>
> because I want to know use“cast_int“ to force “ui” to int ,why it's
> going to be fast。。
>
> am just working with [MacBook Air Chip:APPLE M1] (64bit, C++ compiler)
>
> use the code build and run
>
> #include <iostream>
> #include <chrono>
>
> int test1(signed int a, int b) {
> auto r = a % b;
> return r;
> }
>
> unsigned int test2(unsigned int a, int b) {
> auto r = a % b;
> return r;
> }
>
> using std::chrono::steady_clock;
>
> int main() {
>
> int count = 0;
> std::cin >> count;
> steady_clock::time_point tp1 = steady_clock::now();
> for (int i = 0; i < count; i++) {
> test1(i, 2);
> }
> steady_clock::time_point tp2 = steady_clock::now();
> std::cout << (tp2 - tp1).count() << std::endl;
>
> steady_clock::time_point tp3 = steady_clock::now();
> for (int i = 0; i < count; i++) {
> test2(i, 2);
> }
> steady_clock::time_point tp4 = steady_clock::now();
> std::cout << (tp4 - tp3).count() << std::endl;
>
> return 0;
> }
>
>
> the generated assembly for this the "int test1(signed int a, int b)"
> function comes like this
> LDR w10,[SP, #O×10+var_8]
> SDIV w9,w8,w10
> MULw9,W9,10
>
> the generated assembly for this the "int test2(signed int a, int b)"
> function comes like this
> LDR w10,[SP,#Ox10+var_8]
> UDIV w9,w8,w10
> MUL w9,w8,w10
>
>
> the results:
> (tp2 - tp1).count() 2299667
> (tp4 - tp3).count() 3260583
>
> bil til <biltil52@gmail.com> 于2023年1月21日周六 01:30写道:
> >
> > Am Fr., 20. Jan. 2023 um 17:23 Uhr schrieb game frog
> > <froggame505384662@gmail.com>:
> > >
> > > I found this explanation on this webpage
> > > https://answerbun.com/stack-overflow/why-is-__int128_t-faster-than-long-long-on-x86-64-gcc/
> >
> > ... really funny / interesting. So speciality on Intel CPU but not on
> > AMD, I would not have thought this... .
> >
> > div of course always ist th the hardest operation - principally every
> > CPU does this like you learn "devide by hand" in the grammar school
> > ... . It needs many multiply operations (typically ca. the number you
> > bits you want to devide... but some CPUs have "tricks" / do part of
> > the work in Silicon in parallel).
> >
> > thank you for this interesting input.
> >
> > ... but why are you interested SO much in this ... do you have any
> > problems with this hash function, any timing problems?