LINUX.ORG.RU

[c++] Быстрый способ запустить метод для каждого эл-та в vector

 


0

1

Есть std::vector объектов. Там 100000 элементов. Есть цикл A, запускающий для каждого из этих объектов некоторый метод. Есть цикл B, запускающий цикл A 20000 раз.

Как реализовать цикл А, чтобы делать рассчёты наиболее быстро? Итератор? Счётчик? Или что?

★★★★★

Последнее исправление: Obey-Kun (всего исправлений: 1)
Ответ на: комментарий от LamerOk

А что? Циклы из Си использовать в С++ уже нельзя?

ни в коем случае, иначе волосы между пальцев расти начнут

А! Так в этом основная разница между плюсами и си?!?

конечно! мы же именно этот вопрос в данной теме обсуждаем...

shty ★★★★★
()
Ответ на: комментарий от Obey-Kun

Тогда хватит упарываться над оптимизацией итераторов. Это в любом случае нецелесообразно.
Можешь оптимизировать алгоритм - хорошо. Можешь методику расчета оптимизировать - еще лучше.

madcore ★★★★★
()
Ответ на: комментарий от Obey-Kun

Велкам ту ве клаб;-)

Тогда - пофигу как итерировать, потому что точно упретесь в пропускную способность памяти. И параллелить в общем то без толку... если правда ОЧЕНЬ важна производительность (и схема явная) - гуглите аббревиатуру LRnLA. Хотя 10^5 ячеек это мелочи... ;-)

AIv ★★★★★
()
Ответ на: комментарий от dave

> У вас там некорректная задача?

Задача корректная, но если сделать слишком большой шаг, то она становится некорректной. Тогда за один шаг горячие ячейки передают столько тепла холодным, что те нагреваются сильней, чем были нагреты горячие. И начинается раскачка.

Obey-Kun ★★★★★
() автор топика
Ответ на: комментарий от Eddy_Em

Ваша правда! на 4-х байтном unsigned int (система x64) выдаёт одинаковые результаты,
на 8-ми байтном unsigned long цикл ускоряется почти на секунду =)

backbone ★★★★★
()
Ответ на: комментарий от Eddy_Em

со знаковыми то же самое, для long(8байт) ускорение есть

#include <stdio.h>

typedef long tp;

static const tp MAX = 0x7fffffff;

int main(int argc, char *argv[])
{
        tp i;

        for (i = 0; i < MAX; i++);

//      for (i = MAX; i > 0; i--);

        return 0;

прямой:
real    0m4.334s
user    0m4.330s
sys     0m0.000s

обратный:
real    0m3.893s
user    0m3.890s
sys     0m0.000s

backbone ★★★★★
()
Ответ на: комментарий от backbone

Странно: у вас же система 64-битная, т.е. операции с 64-битными словами наоборот, по идее, быстрее должны работать...

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от Eddy_Em

тогда всё соответствует теории, с 64-битными же результат быстрее получился

backbone ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.