Size: a a a

Kotlin Community

2019 November 27

A

Alex in Kotlin Community
Alexander Nozik
Сильно зависит от того, что за цикл
Цикл for внутри которого одно число типа Long умножается на другое, а затем еще делится на другое число.
источник

AM

Andrew Mikhaylov in Kotlin Community
Alexander Nozik
CPU-bound на больше нет смысла. Но там надо убедиться, что это именно cpu
Запускать параллельно больше -- нет смысла, разбить на бОльшее число чанков в разумных пределах может оказаться проще и при этом не повредит перформансу, непосредственно параллелят всё равно корутины.
источник

A

Alex in Kotlin Community
Andrew Mikhaylov
Очевидно, если задача параллелится, то её можно распараллелить на количество ядер, которые есть в наличии (Runtime.getRuntime().availableProcessors()). Корутины вам тут помогут с тем, что вы запланируете разбиение, сложите в канал порции исходных данных, а после запустите нужное количество корутин на Dispatchers.Default, из которых заберёте порции и рассчитаете их. После чего с помощью async+awaitAll, к примеру, можно будет забрать результат.
Мне не совсем понятно, как распараллеллить умножение числа А на число B
источник

VP

Vladimir Petrakovich in Kotlin Community
Alex
Мне не совсем понятно, как распараллеллить умножение числа А на число B
Распараллеливать надо итерации цикла, если они независимые. А если они все зависят друг от друга - то всё, ничего не сделать.
источник

A

Alex in Kotlin Community
Vladimir Petrakovich
Распараллеливать надо итерации цикла, если они независимые. А если они все зависят друг от друга - то всё, ничего не сделать.
Вот скажем, есть цикл:
for (i in 0..99999) {
   a = (b * c) / d
   if (condition == true) return
}

Это возможно распараллелить? Из идей только запускать еще один цикл, но уже от большего к меньшему)
источник

AM

Andrew Mikhaylov in Kotlin Community
Alex
Вот скажем, есть цикл:
for (i in 0..99999) {
   a = (b * c) / d
   if (condition == true) return
}

Это возможно распараллелить? Из идей только запускать еще один цикл, но уже от большего к меньшему)
Можно просто запустить отдельные задачи с циклами 0..9999, 10000..19999, 20000..29999 и т.д. Количество задач = количество ядер (взять функцией, что я в начале приводил), считайте от этого интервалы и вперёд.
источник

A

Alex in Kotlin Community
Andrew Mikhaylov
Можно просто запустить отдельные задачи с циклами 0..9999, 10000..19999, 20000..29999 и т.д. Количество задач = количество ядер (взять функцией, что я в начале приводил), считайте от этого интервалы и вперёд.
Это значит, что если у меня 2 ядра, то число n нужно разделить на количество ядер? Будет два цикла одновременно выполняться?
источник

AM

Andrew Mikhaylov in Kotlin Community
Ну да, на двух ядрах у вас будут 0..49999 и 50000..99999 выполняться параллельно друг с другом, за счёт чего вы почти уполовините время выполнения.
источник

A

Alex in Kotlin Community
Andrew Mikhaylov
Ну да, на двух ядрах у вас будут 0..49999 и 50000..99999 выполняться параллельно друг с другом, за счёт чего вы почти уполовините время выполнения.
Про что нужно почитать, чтобы понять, как эту параллельность достичь с помощью корутин?
источник

AM

Andrew Mikhaylov in Kotlin Community
Мне кажется, если решение этого не кажется очевидным, то общие концепты стоит почитать с начала до конца. Начните с https://kotlinlang.org/docs/reference/coroutines/coroutines-guide.html, дальше сориентируетесь оттуда.
источник

BV

Boris Vanin in Kotlin Community
Alex
Про что нужно почитать, чтобы понять, как эту параллельность достичь с помощью корутин?
Корутины не реализуют параллельность, это нужно по потоки читать
источник

I

Igor in Kotlin Community
https://youtu.be/DaognWtZCbs #arrow #meta #fp #youtube

Ребят, то что все мы любим - лайв доклада по Arrow Meta 🙂 @ikomarov @happy_bracket
источник

AN

Alexander Nozik in Kotlin Community
Я как раз сегодня утром выложил наш старый семинар на эту тему. Как раз для начинающих: https://www.youtube.com/watch?v=B9p0mz7yb30. Не помню, есть ли там прямо про распараллеливание
источник

A

Alex in Kotlin Community
Спасибо)
источник

AN

Alexander Nozik in Kotlin Community
Не знаю, поможет ли. Но я как раз студентам объяснял. Только имейте в виду, там старые корутины.
источник
2019 November 28

ML

Mikhail Levchenko in Kotlin Community
Ребят, привет, а есть какие нибудь способы попрофилировать время компиляции? Поглядеть там, на каких файлах и на что тратятся ресурсы, как ускорить. Мб флажки какие или насткройки в плагине гредла?
источник

AN

Alexander Nozik in Kotlin Community
Mikhail Levchenko
Ребят, привет, а есть какие нибудь способы попрофилировать время компиляции? Поглядеть там, на каких файлах и на что тратятся ресурсы, как ускорить. Мб флажки какие или насткройки в плагине гредла?
gradle build scan?
источник

ML

Mikhail Levchenko in Kotlin Community
Alexander Nozik
gradle build scan?
не, меня интересует конкретно compileKotlin таска
источник

ML

Mikhail Levchenko in Kotlin Community
билд в целом я уже проанализировал
источник

ML

Mikhail Levchenko in Kotlin Community
есть один жирный модуль, который долго собирается
источник