The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]




Версия для распечатки Пред. тема | След. тема
Новые ответы [ Отслеживать ]
Можн както ускорить вызо C из Go?, !*! Bobik, 18-Фев-22, 22:50  [смотреть все]
Пример надуманный но все же.

Rust:
rustc -C opt-level=3 -l static=num -L. main.rs
real    0m2.168s
user    0m2.163s
sys     0m0.005s

Go:
go build main.go
real    1m18.388s
user    1m18.342s
sys     0m0.092s


//num.c
int print_num(int num) {
    return num * 2;
}

//main.go
func main() {
        res := 0
        for i := 0; i < 1000_000_000; i++ {
                res = int(C.print_num(C.int(i)))
        }
        fmt.Println(res)
}

//main.rs
fn main() {
    let mut x: i32 = 0;
    for i in 0..1000_000_000 {
        unsafe {
            x = print_num(i);
        }
    }
    println!("{}", x);
}

  • Можн както ускорить вызо C из Go?, !*! ыы, 15:43 , 19-Фев-22 (1)
    >[оверквотинг удален]
    > fn main() {
    >     let mut x: i32 = 0;
    >     for i in 0..1000_000_000 {
    >         unsafe {
    >            
    > x = print_num(i);
    >         }
    >     }
    >     println!("{}", x);
    > }

    go build main.go
    main.go:2:1: expected 'package', found 'func'


    • Можн както ускорить вызо C из Go?, !*! Bobik, 16:22 , 19-Фев-22 (2)
      >[оверквотинг удален]
      >>     for i in 0..1000_000_000 {
      >>         unsafe {
      >>
      >> x = print_num(i);
      >>         }
      >>     }
      >>     println!("{}", x);
      >> }
      > go build main.go
      > main.go:2:1: expected 'package', found 'func'

      Это код на rust, он тут как "еталон" по скорости вызова c/c++ кода из других языков.

      • Можн както ускорить вызо C из Go?, !*! ыы, 18:44 , 19-Фев-22 (3)
        >[оверквотинг удален]
        >>>
        >>> x = print_num(i);
        >>>         }
        >>>     }
        >>>     println!("{}", x);
        >>> }
        >> go build main.go
        >> main.go:2:1: expected 'package', found 'func'
        > Это код на rust, он тут как "еталон" по скорости вызова c/c++
        > кода из других языков.

        А это -
        go build
        процесс компиляции а не время рунтайма
        вы сравниваете время компиляции?

        • Можн както ускорить вызо C из Go?, !*! Bobik, 20:25 , 19-Фев-22 (4)
          >[оверквотинг удален]
          >>>>     println!("{}", x);
          >>>> }
          >>> go build main.go
          >>> main.go:2:1: expected 'package', found 'func'
          >> Это код на rust, он тут как "еталон" по скорости вызова c/c++
          >> кода из других языков.
          > А это -
          > go build
          > процесс компиляции а не время рунтайма
          > вы сравниваете время компиляции?

          Сравниваю время выполнения, "go build main.go" пример как компилировал, возможно есть флаги оптимизации которые ускорят. В интернете пишут что gccgo может собрать более быстрый бинарник но не в етом случае, у меня получилось в разы хуже.

          • Можн както ускорить вызо C из Go?, !*! ыы, 22:09 , 19-Фев-22 (5)
            >[оверквотинг удален]
            >>> Это код на rust, он тут как "еталон" по скорости вызова c/c++
            >>> кода из других языков.
            >> А это -
            >> go build
            >> процесс компиляции а не время рунтайма
            >> вы сравниваете время компиляции?
            > Сравниваю время выполнения, "go build main.go" пример как компилировал, возможно есть флаги
            > оптимизации которые ускорят. В интернете пишут что gccgo может собрать более
            > быстрый бинарник но не в етом случае, у меня получилось в
            > разы хуже.

            Посмотрите на хабре статью по теме.
            Есть технические причины почему вызов С функций из Go такой медленный. И похоже это не лечится. Да и надо ли?
            Зачем инклюдить в исходник С-код?

            • Можн както ускорить вызо C из Go?, !*! Bobik, 00:55 , 20-Фев-22 (6)
              > Посмотрите на хабре статью по теме.
              > Есть технические причины почему вызов С функций из Go такой медленный. И
              > похоже это не лечится.

              В целом понятно почему так медленно, думал может кто подскажет как ускорить.

              >Да и надо ли?

              Былобы не плохо, например для использования rocksdb

              > Зачем инклюдить в исходник С-код?

              Тут мне сложно ответить так как я не понял вопрос, просто выше опущены некоторые моменты по компиляции и линковке.

              С-код компилируется gcc в обектный файл а потом линкуется
              с скомпилированым кодом go или rust. Инклудов там никаких нет, можно было слинковать уже с существующей в системе библиотекой, но мне так проще было сделать.

              • Можн както ускорить вызо C из Go?, !*! Брат Анон, 12:34 , 07-Ноя-22 (7)
                > В целом понятно почему так медленно, думал может кто подскажет как ускорить.

                Нет, это никак не ускоряется. Вызовы в Си чудовищно дорогие. Меньше дёргайте Си.

                > Былобы не плохо, например для использования rocksdb

                Передавайте жирные блобы.

                >> Зачем инклюдить в исходник С-код?
                > Тут мне сложно ответить так как я не понял вопрос, просто выше
                > опущены некоторые моменты по компиляции и линковке.

                Вы не поняли вопроса. Зачем вам в Го -- Си? Вы ломаете безопасность типов и инварианты памяти.


                > С-код компилируется gcc в обектный файл а потом линкуется
                > с скомпилированым кодом go или rust. Инклудов там никаких нет, можно было
                > слинковать уже с существующей в системе библиотекой, но мне так проще
                > было сделать.

                Вопрос не про линковку. Вопрос про то, что Си для Го -- совершенно неродной.
                Вы пытаетесь есть суп вилкой.




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру