Coppia di domande JSLCiao a tutti!
Mi stavo chiedendo se qualcuno conosce le risposte a quanto segue:
- Esiste una funzione JSL per determinare il numero di thread che una macchina host può eseguire contemporaneamente.
- la funzionalità di simulazione in JMP Pro è multithreaded?
Qualsiasi pensiero benvenuto.
Grazie!
MRi: Coppia di domande JSL1) No. ma puoi dedurre una risposta con JSL in questo modo:
x=j(1000,1,.);
i=0;
parallelassign({q=i++},x[r,c]=q);
show(i);
Ma questa è solo una * risposta *, non * la * risposta. Anche una singola CPU può avere 100 di thread. E le attuali CPU hanno in genere una capacità di hyper-threading che consente una commutazione dei thread più veloce. Ma il valore di cui sopra è probabilmente quello che vuoi. Spiegazione: all'interno di {q = i ++}, q è una variabile locale in ogni istanza di thread e l'i ++ è un valore di inizializzazione calcolato al di fuori dei thread. Non si dovrebbe scrivere codice che dipende da questo comportamento o dall'ordine apparente in cui gli elementi della matrice sono inizializzati.
2) Guarda il task manager (WIN 7 ha fatto un lavoro migliore mostrando le singole CPU rispetto a 10 fa). Direi di sì.
(MFI è legato all'I / O e utilizza i thread per leggere i file e trarrà vantaggio dai thread su una singola CPU, mentre l'I / O per la lettura di un file in un thread non impedirà a un altro thread di utilizzare la CPU per analizzare i dati già letto per un altro file. Ma simulare è probabilmente legato alla CPU e probabilmente non ha I / O; se è threaded dovrebbe beneficiare di più CPU. ParallelAssign, sopra, è legato alla memoria; la larghezza di banda della memoria determinerà la velocità massima in cui i dati possono essere scritti sulla matrice ... più CPU saranno utili solo se il calcolo è lento sul lato destro di x [r, c] = ... )
Ri: Coppia di domande JSLDomande interessanti, @MikeD_Anderson . Puoi condividere ciò che ti fa chiedere?
Ri: Coppia di domande JSLGrazie, @Craige_Hales !. Penso che funzionerà. Speravo che esistesse una funzione JSL per chiedere all'OS host quanti core ci sono sul processore. Ho appena provato il tuo snippet e mi ha dato la stessa risposta (il mio processore i9 ha 6 core con 2 thread per core = 12 thread).
@Jeff_Perkinson - Sto provando a ballpark un tempo totale di esecuzione per fare una simulazione, es Se il mio modello impiega 2 secondi per essere eseguito, quindi eseguendo 2500 simulazioni (predefinito), distribuito su 6 core a 2 thread per core (supponendo che la simulazione sia multithread), la simulazione dovrebbe richiedere 417 secondi (6 minuti). Voglio inserire un messaggio di avviso in un componente aggiuntivo su cui sto lavorando per fornire all'utilizzatore un campo di osservazione per quanto tempo deve essere eseguita la simulazione. Non è una matematica perfetta, ma mi consentirà almeno di dire: "Ehi, questa simulazione impiegherà 1 ora per correre, sei sicuro di volerlo eseguire?" Posso ottenere il tempo di elaborazione per un'iterazione del modello - niente sudore - ma capire che il numero di thread era qualcosa su cui stavo per essere confuso.
migliore,
M
Ri: Coppia di domande JSLRaddoppiare il numero di CPU non raddoppia mai la velocità per qualsiasi applicazione reale che sia legata alla CPU e alla memoria ... il solito caso. La larghezza di banda della memoria diventa sempre un problema. Potresti assumere 2 o 4 CPU e avere comunque una buona ipotesi, dato tutto il resto che non può essere controllato. Nessuno si lamenterà se finisce presto.