stanford-oval/wikipedia huggingface dataset:
OpenMP
Temel elemanlar > OpenMP Cümlecikleri

OpenMP paylaşımlı bellek programlama modeli olduğu için OpenMP kodu içerisindeki çoğu değişken varsayılan olarak tüm iş parçacıklarına görünür, ama bazen özel değişkenlerin yarış durumlarından kaçınması gereklidir ve seri bölge ile paralel bölge arasındaki değerlerin işlenebilmesi için veri ortam yönetimi veri paylaşım özellik cümlecikleri olarak tanıtılmıştır. Bu cümlecikler OpenMP direktiflerine eklenir
Temel elemanlar > OpenMP Cümlecikleri > Veri paylaşımı özelliği cümlecikleri

shared: paralel bölge ile birlikte veri paylaşılır. Paylaşımın anlamı tüm iş parçacıkları tarafından erişilebilir ve görülebilirdir. Varsayılan olarak iş paylaşım bölgesindeki tüm değişkenlerin döngü iterasyon sayacı dışında hepsi paylaşılır
private: paralel bölge ile birlikte veri her bir iş parçacığına özeldir. Bunun anlamı her bir iş parçacığının yerel bir kopyaya sahip olacağı ve o değişkeni geçici olarak kullanacağıdır. Bir özel değişken ilklendirilmez ve değeri paralel bölge dışında kullanılmaz. Varsayılan olarak döngü iterasyon sayacı özeldir.
default: programcıya Fortran için none, C/C++ için none,firstprivate, private, shared paralel bölgeleri için veri alanına müdahale etmesine izin verir. none seçeneği programcının veri paylaşımlı özellik cümleciğini kullanarak paralel bölge içerisindeki her bir değişkeni tanımlamasına zorlar.
firstprivate: orijinal değeri ilklendirme haricindeprivate gibidir. .
lastprivate: yapıdan sonra güncellenen orijinal değer haricinde private gibidir.
reduction: yapıdan sonra tüm iş parçacıklarının işe katılmasının güvenli bir yöntemidir.
Temel elemanlar > OpenMP Cümlecikleri > Senkronizasyon cümlecikleri

critical: seçili kod bloğu bir kerede sadece bir iş parçacığı tarafından yürütülecektir ve çoklu iş parçacıkları tarafından eşzamanlı yürütlmez. Bu genelde yarış durumlarından veri paylaşımını korumak için kullanılır
atomic: Bellek güncellenmesi otomatik olarak işletilir. Tüm ifadeyi atomic yapmaz, sadece bellek güncellenmesi atomiktir. Bir derleyici daha iyi performans için  critical kullanmak yerine özel bir donanım komutu kullanabilir.
ordered: Yapı bloğu bir sıra içerisinde yürütülür. Bu sıra seri döngü içerisinde yürütülen iterasyonlar ile yapılır.
barrier: her bir iş parçacığı bir takımın diğer iş parçacıklarının tümü bu noktaya ulaşıncaya kadar beklerler. İş paylaşımı yapısı, yapını sonunda örtülü bir bariyer senkronizasyonuna sahiptir.
nowait: Takım içerisindeki tüm iş parçacıklarının bitirmesini beklemeden işleyebilirler. Bu cümleciğin yokluğunda iş parçacıkları iş paylaşım yapısının sonunda bir bariyer senkronizasyonu ile karşılaşır.
Temel elemanlar > OpenMP Cümlecikleri > Zamanlama cümlecikleri

schedule(type, chunk): iş paylaşımlı yapı do-loop veya for-loop ise bu kullanışlıdır. İşpaylaşımı içerisindeki iterasyonlar bu cümlecik kullanılarak tanımlanan zamanlama metoduna göre iş parçacıklarına atanır. Zamanlamanın 3 tipi:
static: Burada tüm iş parçacıkları döngü iterasyonlarını yürütmeden önce iterasyonlara tahsis edilirler. Iterasyonlar varsayılan olarak eşit bir şekilde iş parçacıkları arasında paylaştırılır. Bununla birlikte bir chunk parametresi için bir tam sayı belirlemek özel bir iş parçacığına bitişik iterasyonlar tahsis edecektir.
dynamic: Burada, iterasyonların bazıları daha az sayıda iş parçacıklarına tahsis edilir. İlk kez özel bir iş parçacığı tahsis edildiği iterasyonu tamamlarsa iş parçacığı kalan iterasyonlardan 1 değerini elde etmek için geri döner. chunk parametresi bir kerede bir iş parçacığına tahsis edilecek bitişik iterasyonların sayısını tanımlar.
guided: Çok sayıda bitişik iterasyon parçaları dinamik olarak her bir iş parçacığına tahsis edilir. Parça boyutu chunk parametresi içinde belirlenen minimum boyuta başarılı bir şekilde tahsis edilmesiyle üssel olarak azalır.
Temel elemanlar > OpenMP Cümlecikleri > IF Kontrol

if: Ancak ve ancak bir durum bir görevi paralelleştirmek için iş parçacığı ile karşılaşılmasına sebep oluyorsa görev paralelleştirilir. Diğer durumda kod bloğu seri olarak yürütülür.
Temel elemanlar > OpenMP Cümlecikleri > İlklendirme

firstprivate: Veri her bir iş parçacığına özeldir ama değişkenin değerini kullanan ilklendirme ana iş parçacığından aynı isim kullanılarak yapılır.
lastprivate: Veri her bir iş parçacığına özeldir. Bu özel verinin değeri paralelleştirilmiş döngüdeki iterasyon son iterasyon ise paralel bölgenin dışındada aynı ismi kullanarak global değişkene kopyalanacaktır. Değişken hem firstprivate hem de lastprivate olabilir.
threadprivate: Veri global bir veridir ama çalışma zamanında her bir paralel bölge içerisinde özeldir. threadprivate ve private arasındaki fark threadprivate ile ilişkilendirilmiş global alandır ve paralel bölgeler içerisinde korunmuş değerdir.
Temel elemanlar > OpenMP Cümlecikleri > Veri kopyalama

copyin: private değişkenler içinfirstprivate gibidir, threadprivate değişkenleri ilklendirilmez. Taki karşılık gelen global değişkenlerden değerler geçirilmek için copyin kullanılana kadar.copyout gereksizdir çünkü threadprivate  değişkeninin değeri tüm programın yürütümü boyunca korunur.
copyprivate: bir iş parçacığı üzerindeki özel nesnelerden takım içerisindeki diğer iş parçacıkları üzerinde karşılık gelen nesnelere veri değerlerinin kopyalanmasını desteklemek için single ile birlikte kullanılır.
Temel elemanlar > OpenMP Cümlecikleri > indirgeme

reduction(operator | intrinsic : list): değişken her bir iş parçacığı içerisinde yerel bir kopyaya sahiptir, fakat yerel kopyaların değerleri global paylaşımlı değişken içerisine indirgenmiş olacaktır. Bu eğer özel bir işlem(özel bir cümlecik için operatördeki belirlenmiş) iteratif olarak veritipi üzerindeyse kullanışlı olacaktır. Böylece özel iterasyondaki değeri onun önceki iterasyondaki değerine bağlıdır. Temel olarak operasyonel arttırma paralelleştirmeye yol açan adımlardır. Fakat iş parçacıkları toplanır ve veritipi güncellenmeden önce beklerler. Ardından sırasıyla veritiplerindeki artırımlar yarış durumlarından kaçınmak için gerçekleştirilir. Bu paralelleştirme içerisindeki fonksiyonların sayısal birleştirmelerini ve diferansiyel denklemlerini gerektirecektir.
Temel elemanlar > OpenMP Cümlecikleri > Diğerleri

flush: Bu değişkenin değeri paralel bölümün dışarısındaki bu değeri kullanmak için belleğe, bellekteki yazmaçtan sağlanır
master: Sadece ana iş parçacığı tarafından yürütülür hiçbir örtülü bariyer yoktur. Diğer takım üyelerinin erişmesi gerekmez.
Temel elemanlar > Kullanıcı seviyesi çalışma rutinleri

İş parçacıklarının sayısını değiştirmek ve kontrol etmek, eğer yürütüm paralel bölge içerisinde ise tespit etmek ve o an sistemde kaç tane işlemcinin çalıştığını belirlemek için kullanılır.
Temel elemanlar > Ortam Değişkenleri

OpenMP uygulamalarının yürütme özelliklerini değiştirmek için kullanılan bir metottur. Kontrol döngü iterasyonlarını zamanlamak, iş parçacıklarının sayılarını varsayılan yapmak için kullanılır. Mesela OMP_NUM_THREADS bir uygulama için işparçacıklarının sayılarını belirlemede kullanılır.
Örnek programlar

Bu bölümde bazı örnek programlar üstte açıklanan kavramları göstermek için verilmiştir.
Örnek programlar > Merhaba Dünya

parallel, private ve barrier direktiflerini örnekleyen temel bir program ve omp_get_thread_num ve omp_get_num_threads fonksiyonlarını kullanır.
Örnek programlar > Merhaba Dünya > C

Bu C programı -fopenmp bayrağıyla birlikte gcc 4.4 kullanılarak derlenmiştir.
#include <omp.h>
#include <stdio.h>
#include <stdlib.h>

int main (int argc, char *argv[]) {
  int th_id, nthreads;
  #pragma omp parallel private(th_id)
  {
    th_id = omp_get_thread_num();
    printf("Hello World from thread %d\n", th_id);
    #pragma omp barrier
    if ( th_id == 0 ) {
      nthreads = omp_get_num_threads();
      printf("There are %d threads\n",nthreads);
    }
  }
  return EXIT_SUCCESS;
}
Örnek programlar > Merhaba Dünya > C++

Bu C++ programı GCC: gcc -Wall -fopenmp test.cpp -lstdc++ kullanılarak derlenmiştir.
#include <iostream>
using namespace std;

#include <omp.h>

int main(int argc, char *argv[])
{
  int th_id, nthreads;
  #pragma omp parallel private(th_id) shared(nthreads)
  {
    th_id = omp_get_thread_num();
    #pragma omp critical
    {
      cout << "Hello World from thread " << th_id << '\n';
    }
    #pragma omp barrier

    #pragma omp master
    {
      nthreads = omp_get_num_threads();
      cout << "There are " << nthreads << " threads" << '\n';
    }
  }

  return 0;
}
Örnek programlar > Merhaba Dünya > Fortran 77

Bu da Fortran 77 versiyonu.
PROGRAM HELLO
      INTEGER ID, NTHRDS
      INTEGER OMP_GET_THREAD_NUM, OMP_GET_NUM_THREADS
C$OMP PARALLEL PRIVATE(ID)
      ID = OMP_GET_THREAD_NUM()
      PRINT *, 'HELLO WORLD FROM THREAD', ID
C$OMP BARRIER
      IF ( ID .EQ. 0 ) THEN
        NTHRDS = OMP_GET_NUM_THREADS()
        PRINT *, 'THERE ARE', NTHRDS, 'THREADS'
      END IF
C$OMP END PARALLEL
      END
Örnek programlar > Merhaba Dünya > Fortran 90 serbest biçim

Bu da Fortran 90 serbest biçim versiyonu.
program hello90
 use omp_lib
 integer:: id, nthreads
   !$omp parallel private(id)
   id = omp_get_thread_num()
   write (*,*) 'Hello World from thread', id
   !$omp barrier
   if ( id == 0 ) then
     nthreads = omp_get_num_threads()
     write (*,*) 'There are', nthreads, 'threads'
   end if
   !$omp end parallel
 end program
Örnek programlar > C/C++ İş Paylaşımı Yapılarındaki Cümlecikler

Bazı OpenMP cümleciklerinin uygulaması bu bölümde basit örneklerle gösterilmiştir. Aşağıdaki kod parçası a dizisinin elemanları üzerinde basit bir operasyon işleterek b dizisinin elemanlarını günceller. Paralelleştirme OpenMP direktifi #pragma omp tarafından yapılır. Görevlerin zamanlanması dynamictir. İterasyon sayaçları j ve k'nın özel olmak zorunda olduğunu ve ilkel iterasyon sayacı i'nin varsayılan olarak özel olduğunu görebilirsiniz. i boyunca çalışan görevler çoklu iş parçacıkları arasında paylaştırılmıştır ve her iş parçacığı j ve k'nın kendi versiyonlarını oluştururlar. Bu yüzden tüm görevin tahsisini yapmak ve b dizisinin tahsis edilmiş parçasını güncellemek diğer iş parçacıklarıyla aynı zamanda yapılır.
#define CHUNKSIZE 1 /*defines the chunk size as 1 contiguous iteration*/
 /*forks off the threads*/
 #pragma omp parallel private(j,k) 
 {
  /*Starts the work sharing construct*/
  #pragma omp for schedule(dynamic, CHUNKSIZE)
  for(i = 2; i <= N-1; i++)
     for(j = 2; j <= i; j++)
        for(k = 1; k <= M; k++)
           b[i][j] +=   a[i-1][j]/k + a[i+1][j]/k;
 }
Diğer kod parçacığı indirgeme cümleciğinin indirgenmiş toplamlarını hesaplamak için yaygın kullanımını gösterir. Burada OpenMp direktifleri ve indirgeme cümlecikleri kullanarak paralelleştirdiğimiz for döngüsünü içindeki i ile birlikte tüm a dizisinin elemanlarını ekliyoruz. Zamanlama static sürdürülür.
#define N 10000 /*size of a*/
 void calculate(long *); /*The function that calculates the elements of a*/
 int i;
 long w;
 long a[N];
 calculate(a);
 long sum = 0;
 /*forks off the threads and starts the work-sharing construct*/
 #pragma omp parallel for private(w) reduction(+:sum) schedule(static,1)
 for(i = 0; i < N; i++)
    {
      w = i*i;
      sum = sum + w*a[i];
    }
 printf("\n %li",sum);
Üstteki kodun gerçekleştirimin bir dengi her bir iş parçacığı için yerel sum değişkeni kullanmaktır ("loc_sum") ve sürecin sonunda global sum değişkeninin güncellenmesini korumaktır. Aşağıda açıklandığı gibi bu koruma önemlidir
...
 long sum = 0, loc_sum;
 /*forks off the threads and starts the work-sharing construct*/
 #pragma omp parallel private(w,loc_sum)
 {
   loc_sum = 0;
   #pragma omp for schedule(static,1)
   for(i = 0; i < N; i++)
     {
       w = i*i;
       loc_sum = loc_sum + w*a[i];
     }
   #pragma omp critical
   sum = sum + loc_sum;
 }
 printf("\n %li",sum);
Gerçekleştirimler

OpenMP birçok ticari derleyiciler içerisinde gerçekleştirilir. Mesela Visual C++ 2005,2008 ve 2010 OpenMp destekler. Aynı zamanda Intel Parallel Studio, Oracle Solaris Studio derleyicileri ve araçları OpenMp'nin son versiyonunu destekler. Fortran, C/C++ derleyicileri de OpenMP 2.5 destekler. GCC OpenMp'yi 4.2 versiyonundan beri desteklemektedir.
OpenMP 3.0 gerçekleştirimini destekleyen derleyiciler:
GCC 4.3.1
Nano derleyiciler
Intel Fortran and C/C++ versions 11.0 and 11.1 derleyiciler, Intel C/C++ and Fortran Composer XE 2011 and Intel Parallel Studio.
IBM XL C/C++ derleyici
Sun Studio 12'nin, OpenMP 3.0'ın tüm gerçekleştirimlerini içeren bir güncellemesi vardır.
Birçok derleyici OpenMP 3.1'i destekler:
GCC 4.7
Intel Fortran and C/C++ derleyiciler.
Artılar ve Eksiler

Taşınabilir çok iş parçacıklı kod (C/C++ ve diğer dillerde, bir tanesi tipik olarak çoklu işparçacığını elde etmek için bir platform çağırır)
Basittir. MPI'ın yaptığı gibi mesaj geçirmeyle uğraşmaya gerek yoktur.
Veri planı ve ayrılması direktifler tarafından otomatik olarak yönetilir.
Artımlı paralellik: bir kerede bir programın bir kısmında çalışabilir. Kodda fazla bir değişikliğe ihtiyaç yoktur.
Hem seri hem de paralel uygulamalar için birleştirilimiş kod:OpenMP yapıları seri derleyiciler kullanıldığı zaman derleyiciler tarafından yorumlar olarak anlaşılır.
Seri kod ifadeleri gerekmez. Genel olarak OpenMP ile paralelleştirildiğinde bu beklenmedik hatalarla karşılaşma ihtimalini azaltır.
Hem doğrudan hem de iyileştirilmiş paralelleştirme mümkündür.
Yarış durumları ve senkronizasyon hatalarıyla karşılaşma riski çok fazladır.
Şu anda sadece verimli bir şekilde paylaşımlı bellek platformunda çalışır.
Derleyicinin OpenMP'yi desteklemesini gerektirir.
Ölçeklenebilirlik bellek mimarisi ile sınırlıdır.
karşılaştır ve yer değiştir için destek vermez
hata yönetimine güvenilirlik azdır.
İş parçacığı işlemci eşleştirmeyi kontrol etmek için iyileştirilmiş mekanizma eksiktir.
GPU üzerinde kullanılmaz.
Kazara yanlış paylaşımlı kod yazma olasılğı yüksektir.
Genelde çoklu iş parçacığı hala faydası olmayan yerlerde kullanılmaktadır.
Kriterler

Kullanıcı çalışması için OpenMP kriter alanları mevcuttur..
NAS parallel benchmark28 Ekim 2011 tarihinde Wayback Machine sitesinde arşivlendi.
OpenMP validation suite
OpenMP source code repository1 Mayıs 2013 tarihinde Wayback Machine sitesinde arşivlendi.
EPCC OpenMP Microbenchmarks
Online dokümanlar

Tutorial18 Eylül 2008 tarihinde Wayback Machine sitesinde arşivlendi. on llnl.gov
Reference/tutorial page31 Ocak 2011 tarihinde Wayback Machine sitesinde arşivlendi. on nersc.gov
Tutorial in CI-Tutor20 Aralık 2011 tarihinde Wayback Machine sitesinde arşivlendi.
Bunları da inceleyebilirsiniz

Cilk ve Intel Cilk Plus
Message Passing Interface
Concurrency (computer science)
Parallel computing
Parallel programming model
POSIX Threads
Unified Parallel C
X10 (programming language)
Parallel Virtual Machine
Bulk synchronous parallel
Grand Central Dispatch - C, C++ ve Objective-C için Apple tarafından geliştirilmiş karşılaştırılabilir teknoloji
Partitioned global address space
GPGPU
CUDA - Nvidia
AMD FireStream
Octopiler
OpenCL - Apple, Nvidia, Intel, IBM, AMD/ATI ve diğer pek çoğu tarafından standart desteklidir
OpenACC - openMP'ye birleştirilmesi planlanan GPU hızlandırması için bir standart
Derin öğrenme yazılımlarının karşılaştırılması
Yardımcı Kaynaklar

Quinn Michael J, Parallel Programming in C with MPI and OpenMP McGraw-Hill Inc. 2004. ISBN 0-07-058201-7
R. Chandra, R. Menon, L. Dagum, D. Kohr, D. Maydan, J. McDonald, Parallel Programming in OpenMP. Morgan Kaufmann, 2000. ISBN 1-55860-671-8
R. Eigenmann (Editor), M. Voss (Editor), OpenMP Shared Memory Parallel Programming: International Workshop on OpenMP Applications and Tools, WOMPAT 2001, West Lafayette, IN, USA, July 30–31, 2001. (Lecture Notes in Computer Science). Springer 2001. ISBN 3-540-42346-X
B. Chapman, G. Jost, R. van der Pas, D.J. Kuck (foreword), Using OpenMP: Portable Shared Memory Parallel Programming. The MIT Press (October 31, 2007). ISBN 0-262-53302-2
Parallel Processing via MPI & OpenMP, M. Firuziaan, O. Nommensen. Linux Enterprise, 10/2002
MSDN Magazine article on OpenMP
SC08 OpenMP Tutorial (PDF) - Hands-On Introduction to OpenMP, Mattson and Meadows, from SC08 (Austin)
OpenMP 3.0 Summary Card30 Nisan 2013 tarihinde Wayback Machine sitesinde arşivlendi. (PDF)
Parallel Programming in Fortran 95 using OpenMP (PDF)
OpenMP yapılarının şeması.
Onuncu Doktor

| Doktor> Onuncu Doktor |
| --- | --- |
Canlandıran: David Tennant
Görev süresi: 18 Haziran 2005–1 Ocak 2010
İlk görünüm: "The Parting of the Ways"
Son görünüm: The End of Time (düzenli)  "The Day of the Doctor" (konuk)
Sezon sayısı: 3 + Özel bölümler (2008–10)
Görünümler: 36 hikâye (47 bölüm)
Yol arkadaşları: Rose Tyler Mickey Smith Donna Noble Martha Jones Jack Harkness Astrid Peth Sarah Jane Smith K-9 Jackson Lake Rosita Farisi  Christina de Souza Adelaide Brooke Wilfred Mott
Kronoloji
Önce gelen: Christopher Eccleston (Dokuzuncu Doktor)
Sonra gelen: Matt Smith (On Birinci Doktor)
Sezon(lar): 2. sezon (2006) 3. sezon (2007) 4. sezon (2008) Özel bölümler (2008–10)
Onuncu Doktor, uzun soluklu İngiliz bilimkurgu dizisi olan Doctor Who dizisine isimini veren karakter Doktor'un 10. enkarnasyonudur. Onuncu Doktor karakteri 2005 yılından 2010 yılına kadar David Tennant tarafından canlandırılmıştır.
Diğer Doktor'lar gibi Onuncu Doktor'un da yardımseverlik duygusu hiç değişmemiştir. Onuncu Doktor'un sürekli yardımcıları bir alış-veriş merkezi asistanı olan Rose Tyler (Billie Piper), Tıp öğrencisi Martha Jones (Freema Agyeman) ve daktilo yazıcısı Donna Noble (Catherine Tate)'dır. Onuncu Doktor ilk olarak The Parting of the Ways bölümünde bayrağı Dokuzuncu Doktor (Christopher Eccleston)'dan almış, ilk tam bölüm performansını Noel özel bölümü olan The Christmas Invasion bölümüyle göstermiş ve son olarak ekranlara 2010 yılında "The End of Time" bölümüyle veda ederek yerini On Birinci Doktor'a bırakmıştır.
Onuncu Doktor, Doctor Who'nun 50. Yıl özel bölümü olan ve 23 Kasım 2013'te tüm dünyada eşzamanlı yayınlanan The Day of the Doctor'da On Birinci Doktor (Matt Smith) ve Savaş Doktoru (John Hurt) ile birlikte ekranlarda yeniden görülmüştür. Bu bölüm David Tennant'ın Onuncu Doktor olarak, şimdilik ekranlarda son göründüğü bölümdür.
Genel bakış

Dokuzuncu Doktor, Rose Tyler'ı kurtarmak için Zaman Enerjisini kendine çeker ve bedeni bunu kaldıramadığı için rejenerasyon geçirir ve yerini Onuncu Doktor'a bırakır. Fakat Onuncu Doktor'un asıl hikâyesi The Parting of the Ways bölümünde değil The Christmas Invasion bölümünde başlar. Bu bölüm 2005 yılının Noel'inde yayınlanır ve Onuncu Doktor tam bir bölümde ilk defa görünür. The Christmas Invasion aynı zamanda Doctor Who'nun ilk noel özel bölümü olma özelliğini taşır ve o zamana kadar (25 Aralık 2005) modern serinin yayınlanan en uzun süresine sahip bölümüdür. 60 Dakika olan The Christmas Invasion dizinin standart bölüm süresinden 15 dakika daha uzundur.
Dördüncü Doktor (Tom Baker) döneminde Doktor'un yardımcısı olan Sarah Jane Smith (Elisabeth Sladen) Onuncu Doktor döneminde ilk defa School Reunion bölümünde uzun bir aradan sonra yeniden gözükür ve o bölümden sonra Doctor Who'nun (ilk dört sezon) yapımcısı Russell T Davies tarafından Sarah Jane Smith karakteri için The Sarah Jane Adventures "Sarah Jane'in Maceraları" adında bir spin-off yapılır.
Rejenerasyon

Onuncu Doktor "The End of Time" bölümünde 4. sezondaki yol arkadaşı Donna Noble'ın büyükbabası olan Wilfred Mott (Bernard Cribbins)'u Vinvocci Kapsülün'den kurtarırken yoğun radyosyana maruz kalmıştır. Onuncu Doktor'un bedeni bu yoğun radyasyon'dan dolayı rejenerasyon geçirmek zorunda kalmıştır. Onuncu Doktor'un rejenerasyonu da diğer Doktor'lar gibi duygusal bir sahne olmuştur. Onuncu Doktor'un son sözü "gitmek istemiyorum" olmuştur.
Onuncu Doktor'a rejenerasyonunun yaklaştığı Planet of the Ood bölümünde Ood Sigma tarafından Doktor'un "şarkısının sona erdiği" biçimiyle haber edilmiştir.
Planet of the Dead bölümünde ise yine "Karanlık geliyor. Sizin şarkınız sona eriyor. Kapıyı 4. kere vuracak" sözleriyle Onuncu Doktor'a rejenerasyonu haber edilmiştir.
Kişilik

Onuncu Doktor, (aynı Altıncı Doktor gibi) dışarıdan neşeli bir kimliğinin olduğu gözlense de, aslında Doktor'un en karanlık karaktere sahip olan enkarnasyonlarındandır. Onuncu Doktor'un bu özelliği en belirgin olarak The Satan Pit, The Runaway Bride, Midnight ve The Waters of Mars bölümlerinde gayet net bir şekilde görülebilir. Onuncu Doktor aynı zamanda Doktor'un en kibirli enkarnasyonlarından da birisidir ve sık sık kendini över. The Stolen Earth bölümünde bir dalek tarafından vurulan Onuncu Doktor, yakışıklı ve mükemmel bedenini değiştirmek istemez ve rejenerasyon enerjisini The Christmas Invasion bölümünde kesilen eline aktararak yüzünü korur. Doktor'un bir rejenerasyon hakkı elenmiştir ancak Onuncu Doktor vücut değiştirmemiştir. Bu yüzden Onuncu Doktor iki kez rejenerasyon geçiren ilk ve tek Doktor'dur.
Onuncu Doktor, kendine özel ilk bölümü olan (aynı zamanda Modern Seri'nin ilk özel ve noel özel bölümü) The Christmas Invasion'da, Sycorax liderini alt ettikten sonra kendisini "İkinci bir şans verme. Ben böyle biriyim." şeklinde özetlemiştir.
Russell T Davies Onuncu Doktor'u ilk yıllarda neşeli bir ruh halinde yaratmıştır. 2005 yılında 2. sezon finali olan Doomsday bölümünde Rose Tyler Paralel Dünya'ya geçip gerçeklikte ölünce Doktor neşesini kaybetmeye başlamıştır. Bu ruh halini Onuncu Doktor 2005 Noel özeli olan The Runaway Bride bölümünde Racnoos'a karşı savaşırken açıkça göstermiştir. Onuncu Doktor'un bu psikolojisi daha sonra The Family of Blood bölümünde tekrar gözükmüştür. Onuncu Doktor aileye zarar vermemek için onlardan kaçmıştır fakat aile Onuncu Doktor'un üstüne gelince Doktor bütün aileyi tek tek yok etmiştir.
2007 Noel özel bölümü Voyage of the Damned'de ise Onuncu Doktor'u kurtarmak için Astrid Peth kendini feda etmiştir. Doktor'un psikolojisi bu olaydan sonra daha'da bozulmuştur. Midnight bölümünde yolcular Doktor'u da kimliği belirsiz ve ne olduğu bilinmeyen yaratıkla iş birliği yaptığını sanmışlardır. Onuncu Doktor'un onlara bunun büyük bir saçmalık olduğunu açıklamaya çalışırken oluşan öfkeli hali bir kez daha görünmüştür.
4. sezonun final bölümü Journey's End bölümünde Davros, Doktor'a "Bir düşün Doktor daha kaç tanesi gitti" dediğinde Onuncu Doktor Astrid Peth'i, Jenny'i, Luke Rattigan'ı ve ölen yardımcılarını hatırlamıştır.
2009 özel bölümlerinden olan The Waters of Mars bölümünde, Onuncu Doktor Zaman Yasaları'na karşı gelerek Yüzbaşı Adeleiade Brook ve mürettebatını kurtarmıştır. Fakat Adelaide Brook son sahnede Doktor'un bu yaptığının yanlış olduğunu düşünerek, evinde kendini vurup intihar etmiştir.
Doktor'un onuncu enkarnasyonunun bu özellikleri, ilk bakışta neşeli ve çocuksu görünse de onu en kibirli ve en karanlık Doktor yapmaktadır.
Doctor Who'daki etkisi

Onuncu Doktor David Tennant'ın oyunculuğu ve sempatik mimiklerini kullanışı sayesinde oldukça popüler bir Doktor olmuştur. Doctor Who Magazine dergisi tarafından "Gelmiş Geçmiş En İyi Doktor" seçilmiştir. Yine aynı dergide yapılan anketlerde bugüne kadar Tom Baker'a ait olan "En Tanınmış Doktor" unvanını tam iki kez Dördüncü Doktor'un elinden almıştır.
Belirgin özellikleri

Onuncu Doktor'u canlandıran David Tennant, Yedinci Doktor'u canlandıran Sylvester McCoy ve On İkinci Doktor'u canlandıran Peter Capaldi gibi İskoç'tur.
Onuncu Doktor'un diğer Doktorlardan bir farkı da "kızıl" olma takıntısıdır. The Christmas Invasion  bölümünde ilk yol arkadaşı Rose Tyler'a "Ben kızıl mıyım" diye sormuştur.
Onuncu Doktor, Time Crash mini bölümünde favori Doktor'unun Beşinci Doktor olduğunu belirtmiş ve onun gibi davrandığını söylemiştir.
Onuncu Doktor yine Time Crash mini bölümünde Beşinci Doktor'la karşılaşarak, Doctor Who'nun modern serisinde önceki enkarnasyonlarından biriyle karşılaşan ilk Doktor olmuştur.
Onuncu Doktor'un favori sözü (sloganı) "Allons-y!"dir. Onuncu Doktor'un bu sözü Fransızca'da "Hadi gidelim!" anlamını taşır ve sık sık bu sözü kullanır.