111028 16:57:43 [ERROR] Fatal error: Please read "Security" section of the manual to find out how to run mysqld as root!
Установили ли вы пароль root для своей установки mysql? Это отличается от вашего пароля root sudo. Попробуйте /usr/local/mysql/bin/mysql_secure_installation
Списки не являются лучшим datastructure для этого типа кода (с большим количеством из (++), и (в последний раз)). Вы теряете много времени constucting и вскрывающих противоречия списков. Я использовал бы Данные. Последовательность или массивы, как в версиях C.
нет никакого шанса для преобразователей makeu0, который будет собран "мусор", так как необходимо сохранить всех их (хорошо, все результаты "рассеянных", чтобы быть точными) полностью до конца вычисления, чтобы смочь сделать "реверс" в applyBC. Который является очень дорогой вещью, полагая, что Вам только нужны два объекта от хвоста списка для Вашего "zeroflux".
Вот является быстрый взлом Вас кодом, который пытается достигнуть лучшего сплава списка и действительно меньше перечисляет (de) построение:
module Euler1D
( stepEuler
) where
-- impose zero flux condition
zeroflux mu (boundary:inner:xs) = boundary+mu*2*(inner-boundary)
-- one step of integration
stepEuler mu n = (applyBC . (diffused mu)) $ makeu0 n
where
diffused mu (left:x:[]) = [] -- ignore outer points
diffused mu (left:x:right:xs) = -- integrate inner points
let y = (x+mu*(left+right-2*x))
in y `seq` y : diffused mu (x:right:xs)
applyBC inner = lbc + sum inner + rbc -- boundary conditions
where
lbc = zeroflux mu ((f 0 n):inner) -- left boundary
rbc = zeroflux mu ((f n n):(take 2 $ reverse inner)) -- right boundary
-- initial condition
makeu0 n = [ f x n | x <- [0..n]]
f x n = ((^2) . sin . (pi*) . xi) x
where xi x = fromIntegral x / fromIntegral n
Для 200 000 точек, это завершается за 0,8 секунды по сравнению с 3,8 секундами для начальной версии
В более общем плане можно узнать, куда память идет с помощью "куча" GHC профильные инструменты. , По моему опыту, они не обязательно скажут Вам, почему Ваши данные пропускаются, но могут, по крайней мере, сузить потенциальные причины.
можно также найти освещение этого превосходное сообщение в блоге Don Stewart о понимании строгости, как это взаимодействует со сборкой "мусора", и как диагностировать и решить проблемы.
Делает принуждение "нелень" с помощью $!помощь? согласно этот ответ .
На запрос Harleqin: Вы попытались установить флаги оптимизации? Например, с ghc, можно использовать, добавляют "-O2" точно так же, как Вы были бы с gcc. (Хотя я не уверен, какие уровни оптимизации существуют в ghc; в странице справочника точно не говорится...)
В моем прошлом опыте, устанавливание этого флага сделало огромный различие. Насколько я могу сказать, runhugs
и неоптимизированный ghc
используют самую основную, очевидную реализацию Haskell; к сожалению, это иногда не очень эффективно.
, Но это - просто предположение. Как я сказал в своем комментарии, я надеюсь, что кто-то отвечает на Ваш вопрос хорошо. У меня часто есть проблемы при анализе и фиксации использования памяти Haskell.
Одна вещь, которая перешла к моему глазу теперь, состоит в том, что вывод Haskell является плаванием, в то время как вывод C, кажется, целое число. Я еще не боролся с кодом Haskell, но есть ли, возможно, некоторое место, где у Вас есть арифметика с плавающей точкой в Haskell, в то время как C использует целые числа?
В моей 32-разрядной системе x86 ваша программа использует только около 40 МБ памяти.
Возможно, вы путаете строку «total alloc = 116 835 180 байт» из выходных данных профилирования с сколько памяти фактически используется программой в любой момент времени? Общий объем памяти - это объем памяти, выделенный для всего выполнения программы; большая часть этого освобождается сборщиком мусора по мере вашего продвижения. Вы можете ожидать, что это число станет очень большим в программе на Haskell; У меня есть программы, которые выделяют много террабайт памяти в течение всего своего выполнения, хотя на самом деле у них максимальный размер виртуальной памяти составляет около ста мегабайт.
Я бы не стал слишком беспокоиться о больших общих выделениях в течение курса запуска программы; это природа чистого языка, и GHC '