Torna indietro   Hardware Upgrade Forum > Software > Programmazione

MSI PRO MAX EDGE AI+, Ryzen AI Max+ 395 e 128 GB per far girare in locale anche i modelli più grandi
MSI PRO MAX EDGE AI+, Ryzen AI Max+ 395 e 128 GB per far girare in locale anche i modelli più grandi
Abbiamo provato MSI PRO MAX EDGE AI+, un mini-PC professionale progettato per eseguire modelli di intelligenza artificiale in locale, senza dipendere dal cloud. Il sistema abbina il processore AMD Ryzen AI Max+ 395, 128 GB di memoria unificata e un telaio in alluminio da appena 4 litri, con l'obiettivo di offrire capacità di elaborazione elevate in un formato compatto.
Recensione vivo X500 Pro Max: la fotografia mobile ha un nuovo protagonista
Recensione vivo X500 Pro Max: la fotografia mobile ha un nuovo protagonista
Il nuovo top di gamma vivo punta su un comparto fotografico particolarmente articolato, con un teleobiettivo da 200 megapixel e teleconvertitori esterni capaci di arrivare a 400 mm equivalenti. Lo abbiamo provato a Tenerife, mettendo alla prova fotocamere, prestazioni, autonomia e accessori. Ecco come si è comportato.
WoW Forever: la beta è stato uno dei momenti più alti della storia dei videogiochi, e non si ripeterà
WoW Forever: la beta è stato uno dei momenti più alti della storia dei videogiochi, e non si ripeterà
Un mondo affollato e vivo, personaggi destinati a sparire a fine test e nessuno a inseguire l'oggetto giusto. Beta e stress test di World of Warcraft: Forever hanno fatto emergere un roleplay spontaneo, tra danze a Goldshire e code ordinate ai PNG
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 01-07-2004, 19:57   #1
VegetaSSJ5
Senior Member
 
L'Avatar di VegetaSSJ5
 
Iscritto dal: Sep 2002
Città: Celano (AQ) Segno_Zodiacale: Leone Ascendente: Cammello Segni_Particolari: Quello
Messaggi: 9571
[C] Ridimensionare array bidimensionale

Salve faccio questa domanda per un progetto che devo fare in C che dovrà girare sotto linux.
Poichè si tratta di un'applicazione che farà N fork (tante quante ne passerò come parametro da linea di comando) vorrei che l'array bidimensionale dichiarato dui sotto sia una variabile globale in modo tale che poi ogni processo figlio non abbia nel suo spazio di memoria un nuovo array visto che questo deve essere uguale per tutti i processi (padre e figli). Ecco l'array
Codice:
int automobili[1][2]
A questo punto vorrei ridimensionare questo array in modo tale che sia lungo N colonne ed abbia sempre due righe ciooè del tipo
Codice:
automobili[N][2]
Siccome il numero N non lo conosco a priori allora devo per forza dichiararlo come automobili[1][2] e poi ridimensionarlo in automobili[N][2]. Ho provato quindi a fare questo ridimensionamento attraverso una realloc in questo modo
Codice:
automobili=(int *) realloc (automobili, 2*N*sizeof(int));
tuttavia in fase di compilazione mi segnala l'errore
Codice:
error: incompatible types in argument
Come mai mi segnala quest'errore? A me sembra che la realloc sia fatta in modo giusto! Qualcuno mi aiuta??
VegetaSSJ5 è offline   Rispondi citando il messaggio o parte di esso
Old 01-07-2004, 23:42   #2
Ziosilvio
Moderatore
 
L'Avatar di Ziosilvio
 
Iscritto dal: Nov 2003
Messaggi: 16216
Uhm... ti sei preso una bella gatta da pelare!
Non ho mai fatto niente del genere, ma la sfida mi affascina, quindi ci metto i miei 10 centesimi.

Allora: anzitutto, hai dichiarato automobili come array e non come puntatore, quindi non puoi applicargli realloc.
D'altra parte, il tipo "matrice bidimensionale" in C non esiste, quindi devi implementarlo con i puntatori. Vediamo qualche alternativa...

Potenziale soluzione 1:
Dichiari automobili come puntatore a puntatori a int.
Quando inizializzi la prima volta, lo allochi con una (int**)malloc(nrighe*sizeof(int*)), poi per i da 0 a nrighe-1 allochi automobili[i] con una (int*)malloc(ncolonne*sizeof(int)).
L'elemento generico si chiama sempre automobili[i][j].
La riallocazione dovresti poterla fare (non lo so se funziona, però) chiamando prima realloc(automobili,new_nrighe*sizeof(int*)), e poi realloc(automobili[i],new_ncolonne*sizeof(int)) per i da 0 a new_nrighe-1.

Potenziale soluzione 2:
Ti crei una struttura dati che rappresenta matrici con un arbitrario numero di righe e colonne, con due campi int e un campo int**:
Codice:
struct matrice {
    int nrighe, ncolonne;
    int **elem;
};
più tutte le funzioni che servono a fare somme, prodotti, inizializzazioni eccetera; poi dichiari automobili come puntatore a struct matrice.
L'elemento generico si chiamerà (automobili->elem)[i][j].
La riallocazione la fai creando una nuova matrice, copiandoci dentro la vecchia come sottomatrice, cancellando la vecchia e assegnando a automobili l'indirizzo della nuova.

Fammi sapere come va.
__________________
Ubuntu è un'antica parola africana che significa "non so configurare Debian" Chi scherza col fuoco si brucia.
Scienza e tecnica: Matematica - Fisica - Chimica - Informatica - Software scientifico - Consulti medici
REGOLAMENTO DarthMaul = Asus FX505 Ryzen 7 3700U 8GB GeForce GTX 1650 Win10 + Ubuntu
Ziosilvio è offline   Rispondi citando il messaggio o parte di esso
Old 02-07-2004, 09:08   #3
ilsensine
Senior Member
 
L'Avatar di ilsensine
 
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
Re: [C] Ridimensionare array bidimensionale

Quote:
Originariamente inviato da VegetaSSJ5
si tratta di un'applicazione che farà N fork....ogni processo figlio non abbia nel suo spazio di memoria un nuovo array visto che questo deve essere uguale per tutti i processi (padre e figli).
Posizioni incompatibili. E' valido solo se l'array è in una pagina di memoria di sola lettura o se usi la shared memory.

Solo i thread condividono la tabella di paginazione (quindi tutta la memoria).
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al
andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12
ilsensine è offline   Rispondi citando il messaggio o parte di esso
Old 02-07-2004, 13:33   #4
VegetaSSJ5
Senior Member
 
L'Avatar di VegetaSSJ5
 
Iscritto dal: Sep 2002
Città: Celano (AQ) Segno_Zodiacale: Leone Ascendente: Cammello Segni_Particolari: Quello
Messaggi: 9571
ho usato una soluzione più spartana: ho dichiarato 2 puntatori a int
int *automobili;
int *direzione;

e li ho riallocati singolarmente con lunghezza n.

x ziosilvio:
avevo pensato anch'io a soluzioni del genere ma a me interessava proprio ridimensionare un array bidimensionale senza usare atrifici di qualsiasi tipo e poi il gioco non valeva la candela.

x ilsensine:
thanks, cmq per ora gioco solo con i processi e non con i thread, mi stanno facendo impazzire, anche perchè non c'è nessuno che me li ha spiegati decentemente. Le slide del professore fanno pena, il libro che ho appena comprato (e che sembrava interessante) fa ancora + pena... dovrò provare a leggere gapil. cmq sto facendo un progettino per laboratorio di sistemi operativi e la domanda in questo thread (in questo contesto thread è una parola ambigua ) riguardava proprio questo progetto. se avrò altri dubbi (cioè subito e molti) cercherò prima di risolverli e poi posterò qui sul forum... conto in una vostra mano!
VegetaSSJ5 è offline   Rispondi citando il messaggio o parte di esso
Old 02-07-2004, 14:33   #5
ilsensine
Senior Member
 
L'Avatar di ilsensine
 
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
Quote:
Originariamente inviato da VegetaSSJ5
thanks, cmq per ora gioco solo con i processi e non con i thread
Allora scordati che un processo può leggere un array modificato da un altro processo, a meno di non usare memoria condivisa o un mmap anonimo shared.

Quote:
mi stanno facendo impazzire, anche perchè non c'è nessuno che me li ha spiegati decentemente
Allergico a google?
http://www.llnl.gov/computing/tutori...eads/MAIN.html
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al
andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12
ilsensine è offline   Rispondi citando il messaggio o parte di esso
Old 02-07-2004, 14:47   #6
VegetaSSJ5
Senior Member
 
L'Avatar di VegetaSSJ5
 
Iscritto dal: Sep 2002
Città: Celano (AQ) Segno_Zodiacale: Leone Ascendente: Cammello Segni_Particolari: Quello
Messaggi: 9571
insensine io ho una variabile che devono leggere sia il genitore che i figli (non che ognuno ha la propria, ma tutti devono leggere solo quella variabile). come posso fare?

Ultima modifica di VegetaSSJ5 : 02-07-2004 alle 14:57.
VegetaSSJ5 è offline   Rispondi citando il messaggio o parte di esso
Old 02-07-2004, 14:48   #7
ilsensine
Senior Member
 
L'Avatar di ilsensine
 
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
Tutto dipende se dopo il fork quella variabile deve essere modificata. Se _nessuno_ la modifica dopo il fork, allora ok.
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al
andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12
ilsensine è offline   Rispondi citando il messaggio o parte di esso
Old 02-07-2004, 14:55   #8
VegetaSSJ5
Senior Member
 
L'Avatar di VegetaSSJ5
 
Iscritto dal: Sep 2002
Città: Celano (AQ) Segno_Zodiacale: Leone Ascendente: Cammello Segni_Particolari: Quello
Messaggi: 9571
Quote:
Originariamente inviato da ilsensine
Tutto dipende se dopo il fork quella variabile deve essere modificata. Se _nessuno_ la modifica dopo il fork, allora ok.
dopo il fork quella variabile verrà cambiata solo dal processo padre ogni volta che riceve un SIGALRM da alarm(8). MI CORREGGO posso usare memoria condivisa perchè invece c'è nel programma!
VegetaSSJ5 è offline   Rispondi citando il messaggio o parte di esso
Old 02-07-2004, 14:57   #9
ilsensine
Senior Member
 
L'Avatar di ilsensine
 
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
e allora usala, altrimenti i child non vedranno le modifiche a quella variabile...
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al
andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12
ilsensine è offline   Rispondi citando il messaggio o parte di esso
Old 02-07-2004, 15:00   #10
VegetaSSJ5
Senior Member
 
L'Avatar di VegetaSSJ5
 
Iscritto dal: Sep 2002
Città: Celano (AQ) Segno_Zodiacale: Leone Ascendente: Cammello Segni_Particolari: Quello
Messaggi: 9571
Quote:
Originariamente inviato da ilsensine
e allora usala, altrimenti i child non vedranno le modifiche a quella variabile...
ehm...

http://www.di.univaq.it/~formisano/lso0304/pro5.txt
VegetaSSJ5 è offline   Rispondi citando il messaggio o parte di esso
Old 02-07-2004, 15:06   #11
ilsensine
Senior Member
 
L'Avatar di ilsensine
 
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
Quote:
Originariamente inviato da VegetaSSJ5
ehm...

http://www.di.univaq.it/~formisano/lso0304/pro5.txt
Si interessante, vuoi anche che te lo faccio io?
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al
andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12
ilsensine è offline   Rispondi citando il messaggio o parte di esso
Old 02-07-2004, 15:09   #12
VegetaSSJ5
Senior Member
 
L'Avatar di VegetaSSJ5
 
Iscritto dal: Sep 2002
Città: Celano (AQ) Segno_Zodiacale: Leone Ascendente: Cammello Segni_Particolari: Quello
Messaggi: 9571
Quote:
Originariamente inviato da ilsensine
Si interessante, vuoi anche che te lo faccio io?
la cosa non mi dispiacerebbe... cmq nooooo....... era solo per farti vedere cosa dovevo fare......















VegetaSSJ5 è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


MSI PRO MAX EDGE AI+, Ryzen AI Max+ 395 e 128 GB per far girare in locale anche i modelli più grandi MSI PRO MAX EDGE AI+, Ryzen AI Max+ 395 e 128 GB...
Recensione vivo X500 Pro Max: la fotografia mobile ha un nuovo protagonista Recensione vivo X500 Pro Max: la fotografia mobi...
WoW Forever: la beta è stato uno dei momenti più alti della storia dei videogiochi, e non si ripeterà WoW Forever: la beta è stato uno dei mome...
Oracle AI World 2026: in Europa prima la sovranità, poi la sicurezza e solo dopo l'IA Oracle AI World 2026: in Europa prima la sovrani...
DS N°7 E-Tense: il SUV premium made in Melfi che punta su autonomia e comfort DS N°7 E-Tense: il SUV premium made in Melfi...
Canva lancia Affinity per iPad: sketch, ...
Revolut abbandona OpenAI e Anthropic com...
Xbox Game Pass, tante novità in arrivo i...
Un Googlebook in formato Surface Pro: Le...
Windows 11 non permetterà mai di spostar...
Snowflake porta gli agenti IA dentro il ...
SUSE taglia circa 190 persone, e il CEO ...
Apple Watch Series 12, ribasso di 200€ s...
BMW sfida Tesla FSD: la guida assistita ...
Intel potrebbe interrompere la produzion...
Ubuntu: falla critica nel kernel, per Ca...
Impara dai propri errori e si allena da ...
Google lancia il backup automatico delle...
AMD, spunta una Radeon RX 470 con quattr...
Furto da 6,3 miliardi di dollari a Binan...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 16:13.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v