Ответ 1
Я не воспроизвожу ваши результаты с Ubuntu 14.04.2 LTS, gcc 4.8 и 2.3 ГГц Intel Core i7. Вот результаты, которые я получаю:
$ OMP_NUM_THREADS=1 ./so30627170 100000000 Test Size: 100000000 Std. Deviation = 619920018.463329 Duration: 206.301721ms $ OMP_NUM_THREADS=2 ./so30627170 100000000 Test Size: 100000000 Std. Deviation = 619901821.463117 Duration: 110.381279ms $ OMP_NUM_THREADS=4 ./so30627170 100000000 Test Size: 100000000 Std. Deviation = 619883614.594906 Duration: 78.241708ms
Поскольку вывод, указанный в разделе "Результаты" вашего вопроса, не может соответствовать выходу из указанного кода, вы можете запустить старую версию своего кода.
Я думал о возможностях использования X86 внутри параллельных циклов for
, но, изучая вывод сборки, в этом случае gcc уже использует инструкции SIMD. Без параметров марша, я видел gcc использовать инструкции SSE2. Компиляция с помощью -march=native
или -mavx
, gcc будет использовать инструкции AVX.
EDIT: Запуск версии вашей программы, я получаю:
$ ./tcc-go-desvio-padrao -w 1 -n 15 -t 100000000 2015/06/07 08:26:43 Workers: 1 2015/06/07 08:26:43 Tests: [100000000] 2015/06/07 08:26:43 # of executions of each test: 15 2015/06/07 08:26:43 Time to allocate memory: 584.477µs 2015/06/07 08:26:43 =========================================== 2015/06/07 08:26:43 Current test size: 100000000 2015/06/07 08:27:05 Time to fill the array: 1.322556083s 2015/06/07 08:27:05 Time to calculate: 194.10728ms $ ./tcc-go-desvio-padrao -w 2 -n 15 -t 100000000 2015/06/07 08:27:10 Workers: 2 2015/06/07 08:27:10 Tests: [100000000] 2015/06/07 08:27:10 # of executions of each test: 15 2015/06/07 08:27:10 Time to allocate memory: 565.273µs 2015/06/07 08:27:10 =========================================== 2015/06/07 08:27:10 Current test size: 100000000 2015/06/07 08:27:22 Time to fill the array: 677.755324ms 2015/06/07 08:27:22 Time to calculate: 113.095753ms $ ./tcc-go-desvio-padrao -w 4 -n 15 -t 100000000 2015/06/07 08:27:28 Workers: 4 2015/06/07 08:27:28 Tests: [100000000] 2015/06/07 08:27:28 # of executions of each test: 15 2015/06/07 08:27:28 Time to allocate memory: 576.568µs 2015/06/07 08:27:28 =========================================== 2015/06/07 08:27:28 Current test size: 100000000 2015/06/07 08:27:34 Time to fill the array: 353.646193ms 2015/06/07 08:27:34 Time to calculate: 79.86221ms
Тайминги отображаются примерно так же, как и версия OpenMP.