Ciao a tutti, al solito non riesco a stare fermo nel cercare di risolvere i problemi di macOS con le cpu AMD in svariate app che usano tali librerie di calcolo (Suite Adobe, Discord, Matlab, e alcune release di DaVinci Resolve) e sono incappato in questo articolo:
https://danieldk.eu/Posts/2020-08-31-MKL-Zen.html
La soluzione proposta per usare il codice ottimizzato x86_64 Intel pur con cpu AMD è valida e perfettamente funzionante in Linux come si legge, e allora mi sono chiesto: perché non provare ad adattarla a macOS così da cercare di ovviare ai problemi di compatibilità rimasti? Io in programmazione sono a livello pippone ma qualcosa son riuscito a tirar fuori dal cilindro!!!
Per prima cosa da terminal ho installato brew, "ponte" tra il mondo linux e macOS
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
In seguito ho installato GCC usando brew secondo questa miniguida: https://discussions.apple.com/thread/8336714
Poi ho compilato come libreria dinamica per macOS questo semplice programmino in C con gcc, citato in tale link:
int mkl_serv_intel_cpu_true() {
return 1;
}
il comando che ho usato per la compilazione è, ipotizzando che il programmino in c di cui sopra sia stato salvato in un file testuale fakeintel.c:
gcc -dynamiclib /Users/tomnic/Desktop/fakeintel.c -o libfakeintel.dylib
...ed ho ottenuto la dylib che ho chiamato libfakeintel.dylib (che allego per comodità).
Leggo che l'equivalente in macOS di quello che nell'articolo è la variabile di ambiente LD_PRELOAD è DYLD_INSERT_LIBRARIES (http://web.archive.org/web/20121108142727/https://blogs.oracle.com/DatabaseEmporium/entry/where_is_ld_preload_under).
Possiamo quindi fare in modo che questa libreria venga iniettata in ogni eseguibile unix temporaneamente tramite questo comando:
launchctl setenv DYLD_INSERT_LIBRARIES /Users/tomnic/Desktop/libfakeintel.dylib
Per comodità io tengo sul desktop la libreria suddetta, modificate la vostra path in accordo a dove la piazzerete, se vorrete aiutarmi ovviamente 😉
Io sto provando Adobe After Effects ultimissima versione, la funzione è quella di camera tracking, funzione per cui i soliti trick noti non funzionano più.
I risultati ad ora sono "promettenti":
1. Senza libreria personalizzata il tracking si blocca allo 0% dell'analisi per far poi schiantare il programma in caso di cancellazione del comando;
2. Con la libreria personalizzata il tracking parte e completa l'analisi al 100% tuttavia poi il programma crasha miseramente e nel log leggo il seguente errore:
<1641966> <Tracciatore videocamera 3D Profile Data> <5> Analysis Started (Tutorial - Tracking.mov)
selector.max_count: 500.000000
selector.spacing: 29.000000
selector.half_winx: 15.000000
selector.half_winy: 15.000000
selector.border: 12.000000
selector.threshold: 0.010000
selector.min_eig: 1.000000
selector.max_eig: 6000.000000
selector.presmoothing: 1.000000
selector.presmooth_factor: 0.100000
selector.eig_ratio_threshold: 15.000000
selector.down_sample_factor: 1.000000
tracker.max_iterations: 25.000000
tracker.tolerance_translation: 0.100000
tracker.tolerance_affine: 0.050000
tracker.pyramidal_levels: 5.000000
tracker.half_win_x: 15.000000
tracker.half_win_y: 15.000000
tracker.color_correction_translation: 0.000000
tracker.color_correction_affine: 2.000000
tracker.affine_verification: 1.000000
tracker.tolerance_color_lambda: 0.050000
tracker.tolerance_color_delta: 1.000000
tracker.tolerance_min_correlation: 0.700000
tracker.tolerance_primary_color_threshold: 5.000000
tracker.kill_tracks_shorter_than: 5.000000
<1641966> <StateBinaryConverter> <5> solveCompleteB = 0
<1642537> <StateBinaryConverter> <5> solveCompleteB = 0
<1641966> <AnalyzerServer> <5> Create Temp Project: /var/folders/qw/wdfjy1tx0z3569g9v0gygxw80000gn/T/tmpAEProject-569fa6b4-c9fb-43f2-a2a4-5ea9f85fde5b.aep
<1641966> <AnalyzerServer> <5> Start 7fa4a8b1-fb7a-4570-b4f7-fc33bfce2803
<1641966> <Tracciatore videocamera 3D Profile Data> <5> Analysis Time (seconds) : 5,22 (Tutorial - Tracking.mov)
<1641966> <AnalyzerServer> <5> End 7fa4a8b1-fb7a-4570-b4f7-fc33bfce2803
<1641966> <AnalyzerServer> <5> Delete Temp Project: /var/folders/qw/wdfjy1tx0z3569g9v0gygxw80000gn/T/tmpAEProject-569fa6b4-c9fb-43f2-a2a4-5ea9f85fde5b.aep
<1642537> <StateBinaryConverter> <5> solveCompleteB = 0
[19817:1642194:20210530,203115.482236:WARNING process_memory_mac.cc:93] mach_vm_read(0x7ffeefbff000, 0x2000): (os/kern) invalid address (1)
[19817:1642194:20210530,203115.593841:WARNING mach_o_image_segment_reader.cc:173] section.segname incorrect in segment __TEXT, section
???
???
???
???,
???
???
???
??? 0/11, load command 0x19 0/22, module /Applications/Adobe After Effects 2021/Adobe After Effects 2021.app/Contents/Frameworks/LogSession.framework/Versions/A/Resources/libConfigurer64.dylib, address 0x12f534000
LaunchHeadlightsCrashProcessor result: -11
[19817:1642194:20210530,203119.056962:WARNING crash_report_exception_handler.cc:346] UniversalExceptionRaise: (os/kern) failure (5)
[1] + illegal hardware instruction DYLD_INSERT_LIBRARIES=/Users/tomnic/Desktop/libfakeintel.dylib
...mi pare di capire che l'errore può stare nel codice della mia libreria che esegue del codice illegale... forse devo compilarla con g++? Forse devo includere altro codice nel miniprogrammino C di cui sopra?
Vi va di aiutarmi perché la direzione non pare totalmente sbagliata?
Per ripristinare l'hackintosh al normale funzionamento basta riavviare, non abbiate paura 😉
libfakeintel.dylib.zip