大きく変更されたparallelパッケージ Haskell Platform 2010.2.0.0に同梱されているparallel 2.2.0.1には,第11回で紹介した以前のparallelパッケージとはいくつか大きな違いがあります。 まず,NFDataクラスは逐次プログラムでも有用なことから,parallel 2.2.0.1ではNFDataクラスをdeepseqパッケージに移動しています。このため,NFDataクラスを利用するには,Control.Parallel.StrategiesモジュールではなくdeepseqパッケージのControl.DeepSeqモジュールをインポートする必要があります。 parallel 2.2.0.1では,後方互換性のためにparallelパッケージのControl.Parallel.StrategiesモジュールでもNFDataクラスを再エクスポートしています。しかし,Haskell Platform 2011.1.0.0に同梱予定のparallel 3.1.0.1では,この再エクスポートは行われていません。NFDataクラスを利用するには,deepseqパッケージのControl.DeepSeqモジュールをインポートするようにしましょう(参考リンク1,参考リンク2,参考リンク3)。 もう一つ変更点があります。Strategy型の定義が変更され,NFDataクラスのrnfメソッドが返す値がStrategy型ではなくなりました(参考リンク1,参考リンク2)。 -- Strategies -- | A 'Strategy' is a function that embodies a parallel evaluation strategy. -- The function traverses (parts of) its argument, evaluating subexpressions -- in parallel or in sequence. -- -- A 'Strategy' may do an arbitrary amount of evaluation of its -- argument, but should not return a value different from the one it -- was passed. -- -- Parallel computations may be discarded by the runtime system if the -- program no longer requires their result, which is why a 'Strategy' -- function returns a new value equivalent to the old value. The -- intention is that the program applies the 'Strategy' to a -- structure, and then uses the returned value, discarding the old -- value. This idiom is expressed by the 'using' function. -- type Strategy a = a -> Eval a -- A class of types that can be fully evaluated. class NFData a where -- | rnf should reduce its argument to normal form (that is, fully -- evaluate all sub-components), and then return '()'. -- -- The default implementation of 'rnf' is -- -- > rnf a = a `seq` () -- -- which may be convenient when defining instances for data types with -- no unevaluated fields (e.g. enumerations). rnf :: a -> () rnf a = a `seq` () このため,Strategy型を必要とするusingなどの関数に対しては,新しく用意されたrdeepseq関数をrnfメソッドの代わりに渡す必要があります。 -- | 'rdeepseq' fully evaluates its argument. -- -- > rdeepseq == evalSeq Control.Seq.rdeepseq -- rdeepseq :: NFData a => Strategy a rdeepseq x = rnf x `pseq` return x qsortPar :: (Ord a, NFData a) => [a] -> [a] qsortPar [] = [] qsortPar [x] = [x] qsortPar (x:xs) = losort ++ (x:hisort) `using` strategy where losort = qsortPar [ y | y <- xs, y < x] hisort = qsortPar [ y | y <- xs, y >= x] strategy result = rdeepseq losort `par` rdeepseq hisort `pseq` rdeepseq result primes :: (NFData a, Integral a) => [a] primes = sieve [2..] sieve (p:ps) = (p :) $|| rdeepseq $ sieve $|| rdeepseq $ [q | q <- ps, q `mod` p /= 0] なお,parallel 2.2.0.1からは,using関数の引数を入れ替えたwithStrategy関数が追加されています。 -- | evaluate a value using the given 'Strategy'. This is simply -- 'using' with the arguments reversed. -- withStrategy :: Strategy a -> a -> a withStrategy = flip using 処理によっては,usingよりもwithStrategyを使ったほうが簡潔に記述できるでしょう。 |
第43回 criterionでプログラムの性能を測定する
あなたにお薦め
今日のピックアップ
-
マイナカード1500万枚が電子証明書切れに、ポイント特需から5年で迫る2つの混乱
-
日本の「能動的サイバー防御」は機能するのか、課題と展望を3人の識者が解説
-
変化・貪欲・大胆、Microsoftの50年史に見る強さの秘訣
-
ChromeにAmazonのパスキーを登録する、PINと生体認証の設定も忘れずに
-
女子大生がアプリ100本作成に挑戦、クラス図を何度も描き直しタップゲームができた
-
AIエージェントで開発者の仕事は消滅するのか、GitHubのCEOに聞いてみた
-
「iPhone 16e」の販売に注力する携帯各社、国内スマホ市場の多様性が失われる恐れ
-
冤罪被害者が富士通をついに提訴、英ポストオフィス事件で新展開
-
Gmailは5つのタブに受信メールを自動振り分け、複数のラベル付けでも整理できる
-
米IBMの幹部が直言、日本の最大リスクは塩漬けされている基幹系システム
-
X代替「テキストSNS」の覇権争い、難民が求めるのはバズりかほっこりか
-
65歳まで雇用確保義務化、相性のいい「シニア人材と生成AI」がDXを後押し
注目記事
おすすめのセミナー
-
CIO養成講座 【第37期】
業種を問わず活用できる内容、また、幅広い年代・様々なキャリアを持つ男女ビジネスパーソンが参加し、...
-
意思が伝わる、資料が見違える「ビジネス図解」4つのセオリー
インフォグラフィックスとは、形のない情報やデータなど伝えたいことを分かりやすい形で表現する技法で...
-
「なぜなぜ分析」演習付きセミナー実践編
このセミナーでは「抜け・漏れ」と「論理的飛躍」の無い再発防止策を推進できる現場に必須の人材を育成...
-
業務改革プロジェクトリーダー養成講座【第18期】
3日間の集中講義とワークショップで、事務改善と業務改革に必要な知識と手法が実践で即使えるノウハウ...
-
ITリーダー養成180日実践塾 【第15期】
8回のセミナーでリーダーに求められる“コアスキル”を身につけ、180日間に渡り、講師のサポートの...
注目のイベント
-
ITモダナイゼーションSummit Web Live 2025
2025年 4月 9 日(水) 13:00~18:05/ 4月 10 日(木) 13:00~17:25(予定)
-
【4月10日】みずほFGやLINEヤフーが挑む、障害に強い運用高度化の仕組み
2025年4月10日
-
【4月10日】今さら聞けない仮想化基盤の基本、特徴やメリットを60分で学ぶ
2025年4月10日
-
DLC Server & Datacenter Summit (DSDS25) 東京ナイト
2025年 4月 21日(月) 17:00~19:10
-
【4月22日】大幅コスト増の「仮想化問題」、AI時代にITインフラをどう見直すか
-
AIトレンドFORUM 2025
2025年 4月 23日(水) 13:00~17:00(予定)
-
【4月23日】話題の能動的サイバー防御、従来のセキュリティ対策と何が違う?
2025年4月23日
-
【4月24日】押さえておきたい最新ハイパーバイザーの特徴、60分で徹底解説
2025年4月24日
-
【4月25日】NVIDIAと語る最先端のAIユースケース、展示コーナーで体験も可能
2025年 4月 25日
-
Cyber Identity Foresight 2025
2025年4月25日(金)16:00-18:00/5月21日(水)16:00-18:00
おすすめの書籍
-
ChatGPT &生成AI 実践活用ガイド
マイクロソフトの「Copilot」やグーグルの「Gemini」を含め、生成AIの最新動向や驚きの...
-
SDV革命 次世代自動車のロードマップ2040
自動運転で、自動車の価値は運転性能よりも、その中でいかに過ごすかにシフトする。その価値を追求する...
-
PCトラブル自力解決マニュアル
各種トラブルへの対策、復旧方法をまとめたのが本書です。市販No.1パソコン誌「日経PC21」に掲...
-
これ1冊で丸わかり 完全図解 最新セキュリティー
最新の攻撃手法や、セキュリティーの事例などを詳しく紹介しており、最近のセキュリティー関連で知って...
-
AWSクラウド設計完全ガイド
これから構築するシステムに対して、多種多様なAWSのサービスから最適なサービスを選定し、組み合わ...
-
Word 最速時短術 [増補新版]
本書では、Wordが備える便利機能の数々や生成AIを使いこなしながら、日々の仕事効率を大幅にアッ...
日経BOOKプラスの新着記事
-
はじめに:『コーディング不要で毎日の仕事が5倍速くなる! Difyで作る生成AIアプリ完全入門』
-
はじめに:『経営に活かす生成AIエネルギー論 日本企業の伸びしろを探せ』
-
「俺の金を失ったら、お前を殺す」NVIDIAに出資した大物が放った一言
-
はじめに:『SDV革命 次世代自動車のロードマップ2040』
-
日本人男性の8割がED? 酒との関係を医師が解説
-
池上彰 なぜ私たちは大学で学ぶのか?
-
ハイパフォーマーは身近な人を大切にする
-
北野唯我×舟津昌平 嫌われている人のほうが仕事をしている
-
話題の本 書店別・週間ランキング(2025年3月第4週)
-
あとがき:『ある少年の夢 稲盛和夫はいかに人生を切り開いたか(日経ビジネス人文庫)』
日経クロステック Special
What's New
経営
- 先進自治体が集まって徹底討論!自治体DX
- アジャイル開発が生成AIの活用に有効
- Salesforce≫求められるスキルは
- 決算短信の英文開示 見逃せない重要課題
- 「複合AI」に必要なITインフラを考える
- リコーのDX新拠点 その実力に迫る
- 教育の質を高め、人材育成に寄与する新制度
- 「DXの伴走者」に聞く変革への戦略&方策
- 多角的アプローチによる顧客価値創造とは?
- ERP導入で忘れがちな「大切なこと」とは
- 次世代コンタクトセンターの最新AI技術
- 新オフィスから新価値を創造・発信
- プリンター刷新でトータルコストを削減
- Suicaデータを活用する駅カルテとは!
- 業務のデジタル化の「障壁」と「解決策」
- 未来ビジネスを創るテクノロジーの力
- 大和ハウスのデジタル帳票基盤、導入の裏側
- ServiceNowでDXを加速≫方法は
- SAPプロジェクトの全体像をいかに描くか