CUDA vs Directx 10 per la matematica parallela. hai dei pensieri a riguardo?

StackOverflow https://stackoverflow.com/questions/625162

  •  05-07-2019
  •  | 
  •  

Domanda

CUDA vs Direct X 10 per matematica parallela. hai qualche dubbio a riguardo?

È stato utile?

Soluzione

CUDA è probabilmente un'opzione migliore, se sai che la tua architettura di destinazione utilizza chip nVidia. Hai il controllo completo su trasferimenti di dati, percorsi di istruzione e ordine delle operazioni. Puoi anche cavartela con molte meno chiamate __syncthreads quando lavori al livello inferiore.

DirectX 10 sarà più facile da interfacciare, dovrei pensare, ma se vuoi davvero spingere la tua ottimizzazione della velocità, devi bypassare il livello aggiuntivo. DirectX 10 non saprà nemmeno quando utilizzare la memoria di trama rispetto alla memoria costante rispetto alla memoria condivisa, così come dipenderà dal tuo algoritmo specifico.

Se hai accesso a una Tesla C1060 o qualcosa del genere, CUDA è di gran lunga la scelta migliore. Puoi davvero accelerare le cose se conosci i dettagli della tua GPGPU: ho visto 188 accelerazioni in un particolare algoritmo su una Tesla rispetto al mio desktop.

Altri suggerimenti

Trovo CUDA imbarazzante. Non è C, ma un sottoinsieme di esso. Non supporta nativamente in virgola mobile a doppia precisione ed è emulato. Per precisione singola va bene però. Dipende dal tipo di compito che gli viene assegnato. Devi dedicare più tempo all'informatica in parallelo di quanto passi a passare i dati perché valga la pena utilizzarli. Ma quel problema non è unico per CUDA.

Aspetterei l'OpenCL di Apple che sembra essere lo standard del settore per il calcolo parallelo.

Bene, CUDA è portatile ... È una grande vittoria se me lo chiedi ...

CUDA non ha nulla a che fare con il supporto di operazioni in virgola mobile a precisione doppia. Questo dipende dall'hardware disponibile. Le serie 9, 100, 200 e Tesla supportano operazioni in virgola mobile a precisione doppia tesla .

Dovrebbe essere facile decidere tra di loro.

Se la tua app può tollerare di essere specifica per Windows, puoi comunque prendere in considerazione DirectX Compute. Altrimenti, usa CUDA o OpenCL.

Se la tua app non può tollerare un blocco del fornitore su NVIDIA, non puoi usare CUDA, devi usare OpenCL o DirectX Compute.

Se la tua app sta eseguendo l'interoperabilità DirectX, considera che CUDA / OpenCL incorrerà nel sovraccarico del cambio di contesto eseguendo l'interoperabilità dell'API grafica e DirectX Compute no.

A meno che uno o più di questi criteri non influiscano sulla tua applicazione, usa il bisnonno di toolchain massicciamente paralleli: CUDA.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top