Saya telah menerapkan jenis topologi berdasarkan artikel Wikipedia yang saya gunakan untuk resolusi dependensi, tetapi mengembalikan daftar linier. Algoritma apa yang dapat saya gunakan untuk menemukan jalur independen?
Saya telah menerapkan jenis topologi berdasarkan artikel Wikipedia yang saya gunakan untuk resolusi dependensi, tetapi mengembalikan daftar linier. Algoritma apa yang dapat saya gunakan untuk menemukan jalur independen?
Jawaban:
Saya berasumsi bahwa edge berarti bahwa Anda harus dieksekusi sebelum v . Jika bukan ini masalahnya, balikkan semua tepinya. Saya selanjutnya berasumsi bahwa Anda kurang tertarik pada jalur (yang sudah diberikan oleh DAG) daripada strategi eksekusi yang baik mengingat dependensi.
Anda kemudian dapat menjalankan tugas-tugas Anda seperti ini (mari kita asumsikan ada set):
for i=0 to k
parallel foreach T in S_k
execute T
Tentu saja, ini tidak menghasilkan throughput maksimum jika tugas mengambil jumlah waktu yang berbeda: dua paralel, rantai linear yang bebas disinkronkan setelah setiap elemen. Untuk menghindari ini, saya sarankan Anda bekerja langsung pada DAG dengan traversal paralel yang dimulai pada node sumber - yang ada di - dan sinkronisasi / forking dalam node dengan beberapa tepi masuk / keluar:
parallel foreach T in S_0
recursive_execute T
dimana
recursive_execute T {
atomic { if T.count++ < T.indeg then return }
execute T
parallel foreach T' in T.succ
recursive_execute T'
}
dan T.count
merupakan penghitung sederhana yang memiliki jumlah pendahulu T
yang telah dieksekusi, T.indeg
jumlah pendahulunya dan T.succ
perangkat penerusnya.