{
    "id": 179,
    "date": "2022-07-25T14:09:38",
    "date_gmt": "2022-07-25T12:09:38",
    "guid": {
        "rendered": "https:\/\/tjanus.de\/?p=179"
    },
    "modified": "2022-11-10T13:59:38",
    "modified_gmt": "2022-11-10T12:59:38",
    "slug": "https-tjanus-de-en-2022-07-effizienz-von-code-parallele-for-schleifen-i",
    "status": "publish",
    "type": "post",
    "link": "https:\/\/janus.rs\/de\/2022\/07\/https-tjanus-de-en-2022-07-effizienz-von-code-parallele-for-schleifen-i\/",
    "title": {
        "rendered": "Effizienz von Code &#8211; Parallele For-Schleifen I"
    },
    "content": {
        "rendered": "<p>Dieses Semester (Sommersemester 2022) haben wir zum ersten mal im Rahmen der Veranstaltung Einf\u00fchrung in die Programmierung f\u00fcr Bio- und Chemieingenieure (kurz, EiP) eine Vorlesung zum Thema Effizienz von Code gehalten. Besonders teilenswert finde ich die Einfachheit, in der man heutzutage die Anzahl der Cores eines Rechnes ausnutzen kann, indem man For-Schleifen parallelisiert. Neben MATLAB, die Sprache, die in EiP gelehrt wird, bieten auch Sprachen wie C++ und Rust gute M\u00f6glichkeiten parallele For-Schleifen mit wenig Aufwand umzusetzen. <\/p>\n\n\n\n<p>In diesem Beitrag betrachten wir ein Beispielproblem aus der Chemie: Das Berechnen der mittleren Temperaturen nach dem Zusammenmischen verschiedener Stoffe. Darauf aufbauend betrachten wir wie eine parfor-Schleife in MATLAB das Problem l\u00f6sen kann. Umsetzungen in den systemnahen Programmiersprachen Rust und C++ werden wir uns gegeben falls in einem sp\u00e4teren Beitrag ansehen.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Beispielproblem<\/h2>\n\n\n\n<p>Die Mischtemperatur von mehreren Stoffen kann man mit der Richmannschen Mischungsregel berechnen, die von der folgenden Formel beschrieben wird:<\/p>\n\n\n\n<p>$$T_m = \\frac{\\sum m_i \\cdot c_i \\cdot T_i}{\\sum m_i \\cdot c_i}$$<\/p>\n\n\n\n<p>Als Eingabe ben\u00f6tigen wir die W\u00e4rmekapazit\u00e4ten $~c_i~$, sowie die Massen $~m_i~$ als auch die Temperaturen $~T_i~$. Dazu werden wir zwei $~KxN~$ Matrizen anlegen. Hierbei entspricht N der Anzahl der Gemische, die berechnet werden und K die Anzahl der Stoffe die gemischt werden. Die erste Matrix T enth\u00e4lt die Temperaturen der K Gemisch-Komponenten f\u00fcr N Messpunkte und die zweite Matrix M enth\u00e4lt die Massen. Die W\u00e4rmekapazit\u00e4ten speichern wir in einem K-elementigen Vektor. Im folgendem berechnen wir N mal die Temperatur $~T_m~$. Zuerst definieren wir unsere Daten Matrizen M und T, sowie die W\u00e4rmekapazit\u00e4ten c mit dem folgenden Skript.<\/p>\n\n\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-9d6595d7 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:100%\">\n<pre class=\"wp-block-syntaxhighlighter-code\">N = 1000;\n%N = 1000000;\nK = 4;\nc = rand(1, K) * 0.5 + 2;\nM = rand(N, K) * 30 + 1;\nT = rand(N, K) * 50 + 5;<\/pre>\n<\/div>\n<\/div>\n\n\n\n<p>Wir f\u00fchren also 1000 Berechnungen f\u00fcr Gemische mit vier Komponenten durch und legen daf\u00fcr 4 zuf\u00e4llige W\u00e4rmekapazit\u00e4ten im Bereich 2 bis 2.5 an, sowie 1000&#215;4 Massen im Bereich 1 bis 31 und 1000&#215;4 Temperaturen im Bereich 5-55 an. <\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Implementierung<\/h2>\n\n\n\n<p>Im folgendem verwenden wir Schleifen um mit den zuf\u00e4llig erzeugten Matrizen zu rechnen obwohl in MATLAB die Matrix-Operatoren sehr gut geeignet sind um das Problem ohne den Einsatz von Schleifen zu l\u00f6sen. In produktiven Code w\u00e4ren Matrix-Operatoren die empfohlene Umsetzung. Eine m\u00f6gliche Implementierung zur Berechnung der richmannsche Mischungstemperatur ist in dem folgendem Skript definiert:<\/p>\n\n\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-9d6595d7 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:100%\">\n<pre class=\"wp-block-syntaxhighlighter-code\">results = zeros(N,1);\ntic\nfor i=1:N \n%parfor i=1:N\n    denominator = M(i,:) .* c(:);\n    nominator = denominator(:) .* T(i, :);\n    results (i) = sum(nominator) \/ sum(denominator);\nend\nfprintf(\"Duration with n=%i: %g seconds.\\n\", N, toc);<\/pre>\n<\/div>\n<\/div>\n\n\n\n<p>In Zeile 1 legen wir Speicher zum ablegen der Ergebnisse an. Danach starten wir mittels tic eine Zeitmessung. In Zeile 3\/4 verwenden wir eine for- bzw. parfor-Schleife um die n Gemische zu berechnen. Im Schleifenrumpf wird die richmannsche Mischungsregel berechnet. Dazu wird zuerst der Nenner und dann der Z\u00e4hler mittels elementweisen Matrixoperatoren berechnet um dann in Zeile 7 das Ergebnis zu berechnen. In Zeile 9 wird Ausgegeben wie lange die Berechnung gedauert hat. <\/p>\n\n\n\n<p>Durch das Keyword parfor wird MATLAB veranlasst eine Datendekomposition durchzuf\u00fchren. Intern werden die n Berechnungen in X Abschnitte unterteilt. Hierbei entspricht X h\u00e4ufig der Anzahl der Kerne in einem Rechner und jeder Abschnitt berechnet in etwa n\/X Gemische. Dabei kann MATLAB manchmal vollautomatisch die Unterteilung vornehmen und k\u00fcmmert sich um die n\u00f6tige Kommunikation mit einem Threadpool, so dass der Programmierer damit keine gro\u00dfen Aufw\u00e4nde hat. Dazu m\u00fcssen f\u00fcr eine parfor-Schleife bestimmte Bedingungen zutreffen: Es muss \u00fcber Z\u00e4hlvariablen iteriert werden, Datenabh\u00e4ngigkeiten im Schleifen Rumpf, also z.B. ein Zugriff auf vorherigen Index i-1 sowie eine Verschachtelung von parfor-Schleifen ist nicht erlaubt. Weiteref\u00fchrende Informationen finden sich <a rel=\"noreferrer noopener\" href=\"https:\/\/de.mathworks.com\/help\/parallel-computing\/parfor.html\" target=\"_blank\">hier<\/a>. <\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Zeitmessungen<\/h2>\n\n\n\n<p>Nun f\u00fchren wir ein Zeitmessungen durch. Zuerst starten wir mit n=1000:<\/p>\n\n\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-9d6595d7 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<pre class=\"wp-block-syntaxhighlighter-code\">Duration with n=1000: 0.0061538 seconds. (for-Schleife)\nDuration with n=1000: 0.105125 seconds. (parfor-Schleife)<\/pre>\n<\/div>\n<\/div>\n\n\n\n<p>Das ist unerwartet. Die parallele Variante ben\u00f6tigt mehr Zeit als die sequentielle. Erkl\u00e4rt werden kann dies mit der Initialisierungsarbeit, die MATLAB leisten muss um die Daten auf verschiedene Threads zu verschieben. Wir wiederholen das Experiment mit n=1000000:<\/p>\n\n\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-9d6595d7 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<pre class=\"wp-block-syntaxhighlighter-code\">Duration with n=1000000: 4.46868 seconds. (for-Schleife)\nDuration with n=1000000: 1.16883 seconds. (parfor-Schleife)<\/pre>\n<\/div>\n<\/div>\n\n\n\n<p>Erst mit der gr\u00f6\u00dferen Datenmenge macht eine Parallelisierung des wenig aufwendigen Problems Sinn. Wenn die Operationen im Schleifen-Rumpf aufw\u00e4ndiger w\u00e4ren, als ein paar Additionen und Multiplikationen w\u00fcrde man den vorteilhaften Effekt der Parallelisierung schon bei einem kleinerem n beobachten k\u00f6nnen.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Zusammenfassung<\/h2>\n\n\n\n<p>Durch das Schl\u00fcsselwort parfor ist eine Schnelle Umsetzung von Parallelsierung auf Grundlage von Datendekomposition in MATLAB m\u00f6glich. Wir haben gesehen, dass der Initialisierungsaufwand f\u00fcr kleine Probleme die Anwendung von parfor nicht rechtfertigen, aber f\u00fcr gr\u00f6\u00dfere Probleme die Parallelisierung einen signfikanten Einfluss hat. Das sch\u00f6ne ist, dass der Einsatz von parallelen For-Schleifen oft ohne gro\u00dfe Anpassungen m\u00f6glich ist.<\/p>\n\n\n\n<p><\/p>",
        "protected": false
    },
    "excerpt": {
        "rendered": "<p>Eine Einf\u00fchrung in parallele For-Schleifen mit einem Beispielproblem aus der Chemie und einer Umsetzung in MATLAB.<\/p>",
        "protected": false
    },
    "author": 1,
    "featured_media": 0,
    "comment_status": "open",
    "ping_status": "open",
    "sticky": false,
    "template": "",
    "format": "standard",
    "meta": {
        "ocean_post_layout": "",
        "ocean_both_sidebars_style": "",
        "ocean_both_sidebars_content_width": 0,
        "ocean_both_sidebars_sidebars_width": 0,
        "ocean_sidebar": "0",
        "ocean_second_sidebar": "0",
        "ocean_disable_margins": "enable",
        "ocean_add_body_class": "",
        "ocean_shortcode_before_top_bar": "",
        "ocean_shortcode_after_top_bar": "",
        "ocean_shortcode_before_header": "",
        "ocean_shortcode_after_header": "",
        "ocean_has_shortcode": "",
        "ocean_shortcode_after_title": "",
        "ocean_shortcode_before_footer_widgets": "",
        "ocean_shortcode_after_footer_widgets": "",
        "ocean_shortcode_before_footer_bottom": "",
        "ocean_shortcode_after_footer_bottom": "",
        "ocean_display_top_bar": "default",
        "ocean_display_header": "default",
        "ocean_header_style": "",
        "ocean_center_header_left_menu": "0",
        "ocean_custom_header_template": "0",
        "ocean_custom_logo": 0,
        "ocean_custom_retina_logo": 0,
        "ocean_custom_logo_max_width": 0,
        "ocean_custom_logo_tablet_max_width": 0,
        "ocean_custom_logo_mobile_max_width": 0,
        "ocean_custom_logo_max_height": 0,
        "ocean_custom_logo_tablet_max_height": 0,
        "ocean_custom_logo_mobile_max_height": 0,
        "ocean_header_custom_menu": "0",
        "ocean_menu_typo_font_family": "0",
        "ocean_menu_typo_font_subset": "",
        "ocean_menu_typo_font_size": 0,
        "ocean_menu_typo_font_size_tablet": 0,
        "ocean_menu_typo_font_size_mobile": 0,
        "ocean_menu_typo_font_size_unit": "px",
        "ocean_menu_typo_font_weight": "",
        "ocean_menu_typo_font_weight_tablet": "",
        "ocean_menu_typo_font_weight_mobile": "",
        "ocean_menu_typo_transform": "",
        "ocean_menu_typo_transform_tablet": "",
        "ocean_menu_typo_transform_mobile": "",
        "ocean_menu_typo_line_height": 0,
        "ocean_menu_typo_line_height_tablet": 0,
        "ocean_menu_typo_line_height_mobile": 0,
        "ocean_menu_typo_line_height_unit": "",
        "ocean_menu_typo_spacing": 0,
        "ocean_menu_typo_spacing_tablet": 0,
        "ocean_menu_typo_spacing_mobile": 0,
        "ocean_menu_typo_spacing_unit": "",
        "ocean_menu_link_color": "",
        "ocean_menu_link_color_hover": "",
        "ocean_menu_link_color_active": "",
        "ocean_menu_link_background": "",
        "ocean_menu_link_hover_background": "",
        "ocean_menu_link_active_background": "",
        "ocean_menu_social_links_bg": "",
        "ocean_menu_social_hover_links_bg": "",
        "ocean_menu_social_links_color": "",
        "ocean_menu_social_hover_links_color": "",
        "ocean_disable_title": "default",
        "ocean_disable_heading": "default",
        "ocean_post_title": "",
        "ocean_post_subheading": "",
        "ocean_post_title_style": "",
        "ocean_post_title_background_color": "",
        "ocean_post_title_background": 0,
        "ocean_post_title_bg_image_position": "",
        "ocean_post_title_bg_image_attachment": "",
        "ocean_post_title_bg_image_repeat": "",
        "ocean_post_title_bg_image_size": "",
        "ocean_post_title_height": 0,
        "ocean_post_title_bg_overlay": 0.5,
        "ocean_post_title_bg_overlay_color": "",
        "ocean_disable_breadcrumbs": "default",
        "ocean_breadcrumbs_color": "",
        "ocean_breadcrumbs_separator_color": "",
        "ocean_breadcrumbs_links_color": "",
        "ocean_breadcrumbs_links_hover_color": "",
        "ocean_display_footer_widgets": "default",
        "ocean_display_footer_bottom": "default",
        "ocean_custom_footer_template": "0",
        "_jetpack_memberships_contains_paid_content": false,
        "ocean_post_oembed": "",
        "ocean_post_self_hosted_media": "",
        "ocean_post_video_embed": "",
        "ocean_link_format": "",
        "ocean_link_format_target": "self",
        "ocean_quote_format": "",
        "ocean_quote_format_link": "post",
        "ocean_gallery_link_images": "off",
        "ocean_gallery_id": [],
        "footnotes": ""
    },
    "categories": [
        9
    ],
    "tags": [
        26,
        16
    ],
    "class_list": [
        "post-179",
        "post",
        "type-post",
        "status-publish",
        "format-standard",
        "hentry",
        "category-software-entwicklung",
        "tag-effizienz",
        "tag-matlab",
        "entry"
    ],
    "yoast_head": "<!-- This site is optimized with the Yoast SEO plugin v27.0 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Effizienz von Code - Parallele For-Schleifen I - Janus IT<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/janus.rs\/de\/2022\/07\/https-tjanus-de-en-2022-07-effizienz-von-code-parallele-for-schleifen-i\/\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Effizienz von Code - Parallele For-Schleifen I - Janus IT\" \/>\n<meta property=\"og:description\" content=\"Eine Einf\u00fchrung in parallele For-Schleifen mit einem Beispielproblem aus der Chemie und einer Umsetzung in MATLAB.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/janus.rs\/de\/2022\/07\/https-tjanus-de-en-2022-07-effizienz-von-code-parallele-for-schleifen-i\/\" \/>\n<meta property=\"og:site_name\" content=\"Janus IT\" \/>\n<meta property=\"article:published_time\" content=\"2022-07-25T12:09:38+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2022-11-10T12:59:38+00:00\" \/>\n<meta name=\"author\" content=\"Tim Janus\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@DarthB86\" \/>\n<meta name=\"twitter:site\" content=\"@DarthB86\" \/>\n<meta name=\"twitter:label1\" content=\"Verfasst von\" \/>\n\t<meta name=\"twitter:data1\" content=\"Tim Janus\" \/>\n\t<meta name=\"twitter:label2\" content=\"Gesch\u00e4tzte Lesezeit\" \/>\n\t<meta name=\"twitter:data2\" content=\"4\u00a0Minuten\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/janus.rs\/2022\/07\/https-tjanus-de-en-2022-07-effizienz-von-code-parallele-for-schleifen-i\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/janus.rs\/2022\/07\/https-tjanus-de-en-2022-07-effizienz-von-code-parallele-for-schleifen-i\/\"},\"author\":{\"name\":\"Tim Janus\",\"@id\":\"https:\/\/janus.rs\/en\/#\/schema\/person\/a4844f3174ecb193eccd444867233aef\"},\"headline\":\"Effizienz von Code &#8211; Parallele For-Schleifen I\",\"datePublished\":\"2022-07-25T12:09:38+00:00\",\"dateModified\":\"2022-11-10T12:59:38+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/janus.rs\/2022\/07\/https-tjanus-de-en-2022-07-effizienz-von-code-parallele-for-schleifen-i\/\"},\"wordCount\":735,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/janus.rs\/en\/#organization\"},\"keywords\":[\"Effizienz\",\"MATLAB\"],\"articleSection\":[\"Software Entwicklung\"],\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/janus.rs\/2022\/07\/https-tjanus-de-en-2022-07-effizienz-von-code-parallele-for-schleifen-i\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/janus.rs\/2022\/07\/https-tjanus-de-en-2022-07-effizienz-von-code-parallele-for-schleifen-i\/\",\"url\":\"https:\/\/janus.rs\/2022\/07\/https-tjanus-de-en-2022-07-effizienz-von-code-parallele-for-schleifen-i\/\",\"name\":\"Effizienz von Code - Parallele For-Schleifen I - Janus IT\",\"isPartOf\":{\"@id\":\"https:\/\/janus.rs\/en\/#website\"},\"datePublished\":\"2022-07-25T12:09:38+00:00\",\"dateModified\":\"2022-11-10T12:59:38+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/janus.rs\/2022\/07\/https-tjanus-de-en-2022-07-effizienz-von-code-parallele-for-schleifen-i\/#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/janus.rs\/2022\/07\/https-tjanus-de-en-2022-07-effizienz-von-code-parallele-for-schleifen-i\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/janus.rs\/2022\/07\/https-tjanus-de-en-2022-07-effizienz-von-code-parallele-for-schleifen-i\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/janus.rs\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Effizienz von Code &#8211; Parallele For-Schleifen I\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/janus.rs\/en\/#website\",\"url\":\"https:\/\/janus.rs\/en\/\",\"name\":\"Janus IT\",\"description\":\"Software Engineering\",\"publisher\":{\"@id\":\"https:\/\/janus.rs\/en\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/janus.rs\/en\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"de\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/janus.rs\/en\/#organization\",\"name\":\"Janus IT\",\"url\":\"https:\/\/janus.rs\/en\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\/\/janus.rs\/en\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/i0.wp.com\/janus.rs\/wp-content\/uploads\/2023\/01\/logo_only_color_nobg.png?fit=900%2C900&ssl=1\",\"contentUrl\":\"https:\/\/i0.wp.com\/janus.rs\/wp-content\/uploads\/2023\/01\/logo_only_color_nobg.png?fit=900%2C900&ssl=1\",\"width\":900,\"height\":900,\"caption\":\"Janus IT\"},\"image\":{\"@id\":\"https:\/\/janus.rs\/en\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/x.com\/DarthB86\",\"https:\/\/www.linkedin.com\/in\/tim-janus-07523b13\/\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/janus.rs\/en\/#\/schema\/person\/a4844f3174ecb193eccd444867233aef\",\"name\":\"Tim Janus\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\/\/janus.rs\/en\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/c10bd363a36d45bc7a93771d86419edde82a41a77360c739a3eded5b41592c20?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/c10bd363a36d45bc7a93771d86419edde82a41a77360c739a3eded5b41592c20?s=96&d=mm&r=g\",\"caption\":\"Tim Janus\"},\"sameAs\":[\"http:\/\/s916043165.online.de\"],\"url\":\"https:\/\/janus.rs\/de\/author\/darthb86\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->",
    "yoast_head_json": {
        "title": "Effizienz von Code - Parallele For-Schleifen I - Janus IT",
        "robots": {
            "index": "index",
            "follow": "follow",
            "max-snippet": "max-snippet:-1",
            "max-image-preview": "max-image-preview:large",
            "max-video-preview": "max-video-preview:-1"
        },
        "canonical": "https:\/\/janus.rs\/de\/2022\/07\/https-tjanus-de-en-2022-07-effizienz-von-code-parallele-for-schleifen-i\/",
        "og_locale": "de_DE",
        "og_type": "article",
        "og_title": "Effizienz von Code - Parallele For-Schleifen I - Janus IT",
        "og_description": "Eine Einf\u00fchrung in parallele For-Schleifen mit einem Beispielproblem aus der Chemie und einer Umsetzung in MATLAB.",
        "og_url": "https:\/\/janus.rs\/de\/2022\/07\/https-tjanus-de-en-2022-07-effizienz-von-code-parallele-for-schleifen-i\/",
        "og_site_name": "Janus IT",
        "article_published_time": "2022-07-25T12:09:38+00:00",
        "article_modified_time": "2022-11-10T12:59:38+00:00",
        "author": "Tim Janus",
        "twitter_card": "summary_large_image",
        "twitter_creator": "@DarthB86",
        "twitter_site": "@DarthB86",
        "twitter_misc": {
            "Verfasst von": "Tim Janus",
            "Gesch\u00e4tzte Lesezeit": "4\u00a0Minuten"
        },
        "schema": {
            "@context": "https:\/\/schema.org",
            "@graph": [
                {
                    "@type": "Article",
                    "@id": "https:\/\/janus.rs\/2022\/07\/https-tjanus-de-en-2022-07-effizienz-von-code-parallele-for-schleifen-i\/#article",
                    "isPartOf": {
                        "@id": "https:\/\/janus.rs\/2022\/07\/https-tjanus-de-en-2022-07-effizienz-von-code-parallele-for-schleifen-i\/"
                    },
                    "author": {
                        "name": "Tim Janus",
                        "@id": "https:\/\/janus.rs\/en\/#\/schema\/person\/a4844f3174ecb193eccd444867233aef"
                    },
                    "headline": "Effizienz von Code &#8211; Parallele For-Schleifen I",
                    "datePublished": "2022-07-25T12:09:38+00:00",
                    "dateModified": "2022-11-10T12:59:38+00:00",
                    "mainEntityOfPage": {
                        "@id": "https:\/\/janus.rs\/2022\/07\/https-tjanus-de-en-2022-07-effizienz-von-code-parallele-for-schleifen-i\/"
                    },
                    "wordCount": 735,
                    "commentCount": 0,
                    "publisher": {
                        "@id": "https:\/\/janus.rs\/en\/#organization"
                    },
                    "keywords": [
                        "Effizienz",
                        "MATLAB"
                    ],
                    "articleSection": [
                        "Software Entwicklung"
                    ],
                    "inLanguage": "de",
                    "potentialAction": [
                        {
                            "@type": "CommentAction",
                            "name": "Comment",
                            "target": [
                                "https:\/\/janus.rs\/2022\/07\/https-tjanus-de-en-2022-07-effizienz-von-code-parallele-for-schleifen-i\/#respond"
                            ]
                        }
                    ]
                },
                {
                    "@type": "WebPage",
                    "@id": "https:\/\/janus.rs\/2022\/07\/https-tjanus-de-en-2022-07-effizienz-von-code-parallele-for-schleifen-i\/",
                    "url": "https:\/\/janus.rs\/2022\/07\/https-tjanus-de-en-2022-07-effizienz-von-code-parallele-for-schleifen-i\/",
                    "name": "Effizienz von Code - Parallele For-Schleifen I - Janus IT",
                    "isPartOf": {
                        "@id": "https:\/\/janus.rs\/en\/#website"
                    },
                    "datePublished": "2022-07-25T12:09:38+00:00",
                    "dateModified": "2022-11-10T12:59:38+00:00",
                    "breadcrumb": {
                        "@id": "https:\/\/janus.rs\/2022\/07\/https-tjanus-de-en-2022-07-effizienz-von-code-parallele-for-schleifen-i\/#breadcrumb"
                    },
                    "inLanguage": "de",
                    "potentialAction": [
                        {
                            "@type": "ReadAction",
                            "target": [
                                "https:\/\/janus.rs\/2022\/07\/https-tjanus-de-en-2022-07-effizienz-von-code-parallele-for-schleifen-i\/"
                            ]
                        }
                    ]
                },
                {
                    "@type": "BreadcrumbList",
                    "@id": "https:\/\/janus.rs\/2022\/07\/https-tjanus-de-en-2022-07-effizienz-von-code-parallele-for-schleifen-i\/#breadcrumb",
                    "itemListElement": [
                        {
                            "@type": "ListItem",
                            "position": 1,
                            "name": "Home",
                            "item": "https:\/\/janus.rs\/"
                        },
                        {
                            "@type": "ListItem",
                            "position": 2,
                            "name": "Effizienz von Code &#8211; Parallele For-Schleifen I"
                        }
                    ]
                },
                {
                    "@type": "WebSite",
                    "@id": "https:\/\/janus.rs\/en\/#website",
                    "url": "https:\/\/janus.rs\/en\/",
                    "name": "Janus IT",
                    "description": "Software Engineering",
                    "publisher": {
                        "@id": "https:\/\/janus.rs\/en\/#organization"
                    },
                    "potentialAction": [
                        {
                            "@type": "SearchAction",
                            "target": {
                                "@type": "EntryPoint",
                                "urlTemplate": "https:\/\/janus.rs\/en\/?s={search_term_string}"
                            },
                            "query-input": {
                                "@type": "PropertyValueSpecification",
                                "valueRequired": true,
                                "valueName": "search_term_string"
                            }
                        }
                    ],
                    "inLanguage": "de"
                },
                {
                    "@type": "Organization",
                    "@id": "https:\/\/janus.rs\/en\/#organization",
                    "name": "Janus IT",
                    "url": "https:\/\/janus.rs\/en\/",
                    "logo": {
                        "@type": "ImageObject",
                        "inLanguage": "de",
                        "@id": "https:\/\/janus.rs\/en\/#\/schema\/logo\/image\/",
                        "url": "https:\/\/i0.wp.com\/janus.rs\/wp-content\/uploads\/2023\/01\/logo_only_color_nobg.png?fit=900%2C900&ssl=1",
                        "contentUrl": "https:\/\/i0.wp.com\/janus.rs\/wp-content\/uploads\/2023\/01\/logo_only_color_nobg.png?fit=900%2C900&ssl=1",
                        "width": 900,
                        "height": 900,
                        "caption": "Janus IT"
                    },
                    "image": {
                        "@id": "https:\/\/janus.rs\/en\/#\/schema\/logo\/image\/"
                    },
                    "sameAs": [
                        "https:\/\/x.com\/DarthB86",
                        "https:\/\/www.linkedin.com\/in\/tim-janus-07523b13\/"
                    ]
                },
                {
                    "@type": "Person",
                    "@id": "https:\/\/janus.rs\/en\/#\/schema\/person\/a4844f3174ecb193eccd444867233aef",
                    "name": "Tim Janus",
                    "image": {
                        "@type": "ImageObject",
                        "inLanguage": "de",
                        "@id": "https:\/\/janus.rs\/en\/#\/schema\/person\/image\/",
                        "url": "https:\/\/secure.gravatar.com\/avatar\/c10bd363a36d45bc7a93771d86419edde82a41a77360c739a3eded5b41592c20?s=96&d=mm&r=g",
                        "contentUrl": "https:\/\/secure.gravatar.com\/avatar\/c10bd363a36d45bc7a93771d86419edde82a41a77360c739a3eded5b41592c20?s=96&d=mm&r=g",
                        "caption": "Tim Janus"
                    },
                    "sameAs": [
                        "http:\/\/s916043165.online.de"
                    ],
                    "url": "https:\/\/janus.rs\/de\/author\/darthb86\/"
                }
            ]
        }
    },
    "jetpack_featured_media_url": "",
    "jetpack_sharing_enabled": true,
    "_links": {
        "self": [
            {
                "href": "https:\/\/janus.rs\/de\/wp-json\/wp\/v2\/posts\/179",
                "targetHints": {
                    "allow": [
                        "GET"
                    ]
                }
            }
        ],
        "collection": [
            {
                "href": "https:\/\/janus.rs\/de\/wp-json\/wp\/v2\/posts"
            }
        ],
        "about": [
            {
                "href": "https:\/\/janus.rs\/de\/wp-json\/wp\/v2\/types\/post"
            }
        ],
        "author": [
            {
                "embeddable": true,
                "href": "https:\/\/janus.rs\/de\/wp-json\/wp\/v2\/users\/1"
            }
        ],
        "replies": [
            {
                "embeddable": true,
                "href": "https:\/\/janus.rs\/de\/wp-json\/wp\/v2\/comments?post=179"
            }
        ],
        "version-history": [
            {
                "count": 47,
                "href": "https:\/\/janus.rs\/de\/wp-json\/wp\/v2\/posts\/179\/revisions"
            }
        ],
        "predecessor-version": [
            {
                "id": 249,
                "href": "https:\/\/janus.rs\/de\/wp-json\/wp\/v2\/posts\/179\/revisions\/249"
            }
        ],
        "wp:attachment": [
            {
                "href": "https:\/\/janus.rs\/de\/wp-json\/wp\/v2\/media?parent=179"
            }
        ],
        "wp:term": [
            {
                "taxonomy": "category",
                "embeddable": true,
                "href": "https:\/\/janus.rs\/de\/wp-json\/wp\/v2\/categories?post=179"
            },
            {
                "taxonomy": "post_tag",
                "embeddable": true,
                "href": "https:\/\/janus.rs\/de\/wp-json\/wp\/v2\/tags?post=179"
            }
        ],
        "curies": [
            {
                "name": "wp",
                "href": "https:\/\/api.w.org\/{rel}",
                "templated": true
            }
        ]
    }
}