2009-09-25 3 views
0

У меня есть вопрос о распараллеливании:Вопрос о распараллеливании задачи

У меня есть два набора данных. Dataset1 имеет m строк и k столбцов, Dataset2 имеет n строк и k столбцов. (M> n) Моя программа считывает эти наборы данных из файлов и сохраняет их в памяти. Задача состоит в том, чтобы взять каждый экземпляр Dataset1 (назовем этот экземпляр запроса) и сравнить со всеми экземплярами Dataset2.

Теперь мой вопрос заключается в том, что:

  • (Option1) Должен ли я разделить Dataset2 в й количество разделов и назначить эти разделы к й количеству рабочих потоков в каждом запросе (это означает, что, в сравнение с экземпляр запроса в Dataset2) Dataset1 или
  • (Option2) Должен ли я взять x количество экземпляров из набора данных 1, назначьте x число рабочих потоков для запроса Dataset2 одновременно.

Какой из них был бы более эффективным? // Кстати, я использую библиотеку PThreads на данный момент.

+0

Чтобы быть понятным, вы в основном спрашиваете, следует ли разделить больший или меньший набор данных? – phoebus

+0

Нет, не совсем. Мой вопрос состоит в том, чтобы либо разбить Dataset2 (малый), либо работать над этими разделами одновременно, либо просто запрашивать небольшой набор данных одновременно с каждым экземпляром большого массива данных одновременно. Просто разбить или не разбить. – systemsfault

ответ

1

Я бы с вариантом 1, то есть раздел Dataset 2.

Обоснование:

Dataset 1, вероятно, слишком велик, чтобы поместиться в кэш в любом случае, поэтому вы подметать над ним один раз, и сравнивая каждая запись ко всем записям в наборе данных 2.

Теперь давайте предположим, что набор данных 2 слишком велик, чтобы полностью входить в кеш одного процессора, но он достаточно велик, чтобы входить в кеш, если он разбит на разделы x, с кешем каждого процессора, содержащим один из разделов. В этом случае, если вы идете с Вариантом 1, кеш каждого процессора будет достаточно большим, чтобы содержать один из разделов. Если вы перейдете к варианту 2, каждый процессор должен обработать весь набор данных 2, который слишком велик, чтобы соответствовать его кешу, поэтому происходит перехват.

Если Dataset 2 достаточно мал, чтобы полностью входить в кеш, то, вероятно, в значительной степени не имеет значения, какой вариант вы выберете.

Смежные вопросы