Я пытаюсь создать потоки в C++. Я уверен, что создание потоков внутри цикла for не означает параллелизм. Но я хочу распараллеливать приведенный ниже фрагмент кода.Увеличение производительности в C++
for(int i = 0; i < 100000; i++) // for each instance in the dataset
{
for(int j = 0; j < 100000; j++) // target each other instance
{
if(i == j) continue;
float distance = 0;
for(int k = 0; k < 2000; k++)
{
float a = dataset->get_instance(i)->get(k)->operator float();
float b = dataset->get_instance(j)->get(k)->operator float();
float diff = a - b
distance += diff * diff;
}
distance = distance + 10;
}
}
Есть ли возможность параллелизма в вышеуказанной части кода? Или может кто-нибудь предоставить мне пример кода, чтобы понять аналогичную распараллеливание потоков.
Ну, прежде всего, вам нужно выяснить, сколько у вас аппаратных ядер. Затем вам нужно измерить и разделить работу самым эффективным способом. Итак, в основном старайтесь и терпите неудачу, пока не получится. – Incomputable
Этот код не работает. 'distance' объявляется внутри цикла' for (j) ', поэтому значение неизвестно вне. – kfsone
@kfsone: Я обновил использование дистанции снаружи. Можете ли вы любезно предоставить какие-либо указатели или дать мне любую логику кода, чтобы быть результатом. –