E. Implementeringsdefinierade beteenden i OpenMP C/C++

I den här bilagan sammanfattas de beteenden som beskrivs som "implementeringsdefinierade" i det här API:et. Varje beteende korsreferenseras tillbaka till beskrivningen i huvudspecifikationen.

Anmärkningar

En implementering krävs för att definiera och dokumentera dess beteende i dessa fall, men den här listan kan vara ofullständig.

  • Antal trådar: Om en parallell region påträffas när dynamisk justering av antalet trådar inaktiveras och antalet trådar som begärs för den parallella regionen är mer än det antal som körningssystemet kan ange, är programmets beteende implementeringsdefinierat (se sidan 9).

    I Visual C++, för en icke-kapslad parallell region, tillhandahålls 64 trådar (maximalt).

  • Antal processorer: Antalet fysiska processorer som faktiskt är värdar för trådarna vid en viss tidpunkt är implementeringsdefinierat (se sidan 10).

    I Visual C++ är det här talet inte konstant och styrs av operativsystemet.

  • Skapa team med trådar: Antalet trådar i ett team som kör en kapslad parallell region är implementeringsdefinierad (se sidan 10).

    I Visual C++bestäms det här talet av operativsystemet.

  • schedule(runtime): Beslutet om schemaläggning skjuts upp till körningstid. Du kan välja schematyp och segmentstorlek vid körning genom att ställa in OMP_SCHEDULE miljövariabeln. Om den här miljövariabeln inte har angetts är det resulterande schemat implementeringsdefinierat (se sidan 13).

    I Visual C++ är schematypen static utan segmentstorlek.

  • Standardschemaläggning: I avsaknad av schemasatsen är standardschemat implementeringsdefinierat (se sidan 13).

    I Visual C++är static standardschematypen utan segmentstorlek.

  • ATOMÄR: Det är implementeringsdefinierat om en implementering ersätter alla atomic direktiv med critical direktiv som har samma unika namn (se sidan 20).

    I Visual C++, om data som modifierats av atomiska inte är på en naturlig anpassning eller om det är en eller två byte långt, kommer alla atomiska operationer som uppfyller denna egenskap att använda ett kritiskt avsnitt. Annars används inte kritiska avsnitt.

  • omp_get_num_threads: Om antalet trådar inte uttryckligen har angetts av användaren är standardinställningen implementeringsdefinierad (se sidan 9).

    I Visual C++är standardantalet trådar lika med antalet processorer.

  • omp_set_dynamic: Standardinställningen för dynamisk trådjustering är implementeringsdefinierad.

    I Visual C++är FALSEstandardvärdet .

  • omp_set_nested: När kapslad parallellitet är aktiverad, definieras antalet trådar som används för att köra kapslade parallella regioner av implementationen.

    I Visual C++bestäms antalet trådar av operativsystemet.

  • OMP_SCHEDULE miljövariabel: Standardvärdet för den här miljövariabeln är implementeringsdefinierat.

    I Visual C++ är schematypen static utan segmentstorlek.

  • OMP_NUM_THREADS miljövariabel: Om inget värde har angetts för OMP_NUM_THREADS miljövariabeln, eller om det angivna värdet inte är ett positivt heltal, eller om värdet är större än det maximala antalet trådar som systemet kan stödja, är antalet trådar som ska användas implementeringsdefinierat.

    Om det angivna värdet i Visual C++ är noll eller mindre är antalet trådar lika med antalet processorer. Om värdet är större än 64 är antalet trådar 64.

  • OMP_DYNAMIC miljövariabel: Standardvärdet är implementeringsdefinierat.

    I Visual C++är FALSEstandardvärdet .