- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
using System;
class ololo
{
static void Main()
{
int ru, en;
for (ru = 7700; ru < 8025; ru += 25)
for (en = 3220; en < 4050; en += 50)
Console.WriteLine("Ру " + ru + " и En " + en);
}
}
што?
Впринципе, можно взять ерланг и сделать акторов которые считают подобные задачи
А еще можно считать на GPU, но только если задачи одинаковые (единое действие для набора данных)
Маловато будет. У той же куды блоки минимум 16 тредов.
На самом деле можно еще купить у хацкеров ботнет, и получить такой вот кластерок на пару тысяч машин юных дрочеров и юзать их ресурсы
P.S. Моя не сможет, у нее, к сожалению, всего 960 ядер.
http://hackage.haskell.org/package/accelerate
Хотя там, вроде как, именно array надо...
Просто в той же куде можно было по индексам блока и треда нагенерить этих чисел параллельно.
Почему не запустилось? УМВР. Я даже результат с сишной прогой сверил.
> вдруг на идеоне кудкуда есть
Маловероятно.
Ну accelerate более-менее декларативный, а thrust и boost::compute - просто альтернативная версия алгоритмов stl, которая может юзать видюху.
boost::compute::function<int (int)> add_four =
Скорее всего сортирует небольшими блоками каким-нибудь простым алгоритмом, а потом mergesort.
Это GpuParallel, то есть ЖопаПараллель.
Новый диспетчер задач в таких сценариях поступает более изощренно – у каждого потока есть своя локальная очередь и каждая дочерняя задача помещается в эту локальную очередь, а не в общую. Таким образом, нагрузка на общую очередь существенно снижается. При этом выборка из локальной очереди производится по принципу LIFO – в этом случае выше вероятность, что данные необходимые для задачи, забираемой из очереди на выполнение, все еще достаточно "горячи", чтобы не вылететь из кэша.
Потенциально здесь кроется проблема, связанная с тем, что локальные очереди с очень большой вероятностью будут разными по размеру, и, пока один поток разгребает свою очередь, другой может простаивать без дела. Чтобы этого избежать, алгоритм поиска новой задачи для потока выглядит так – сначала просматривается локальная очередь потока, если там пусто, то просматривается глобальная очередь. Если пусто и там, просматриваются локальные очереди соседних потоков (механизм, что характерно, называется work stealing). При этом доступ к локальным очередям соседей уже опять происходит по принципу FIFO, чтобы не мешаться со своей помощью...
http://govnokod.ru/13909#comment198947
На IO они не очень. Только на вычислительных задачах с предсказуемым временем окончания и низкой латенси.
Когда-то постил новость что интел у себя баг нашли и тоже на время залочили TSX.
Видимо не такая это простая в реализации штука.