Próbowałem przekazać tablicę do podprogramu, zadeklarowanego w podprocedurze jako przyjęta tablica kształtów. To dawało mi pewne problemy, które udało mi się rozwiązać, przekazując zamiast tego wskaźnik.Czy wskaźniki blokują optymalizacje kompilatora?
Ale jakiś użytkownik z wysokiej reputacji mówi mi w komentarzu:
Dodanie wskaźnika jest także rozsądny sposób mówienia Optymalizator kompilatorów, że nie ma dzisiaj robić żadnej pracy.
Czy ktoś może przedstawić krótkie wyjaśnienie na ten temat? Językiem jest Fortran 95, choć uważam, że dotyczy to innych języków.
myślę PO odnosi się do tego [komentarz] (http://stackoverflow.com/questions/41009109/subroutine-not-returning-correct-numerical-values-in-assumed-shape-array-due-to # comment69272729_41032273). – 4castle
To prawda. W przypadku karty SIMD trudno jest zagwarantować, że dane są sekwencyjne, niezależnie od tego, czy punkt jest indeksowany sekwencyjnie. Jest to prawdopodobnie bardziej prawdziwe w przypadku Fortranu niż w większości języków, ponieważ wiele Fortranu jest szczególnie ukierunkowanych na wektory/tablice. Ale wnętrzności kompilatorów ogólnie zbliżają się do asymptoty, gdzie zgromadzenie może być prawie identyczne między fortranem a c. Ogólnie oznacza pewne rzeczy, a trudniejszy kod wymaga więcej pracy. – Holmz
@ 4castle Nie zamieściłem linku do oryginalnego komentarza celowo, ponieważ zawiera on wprowadzające w błąd informacje: (za pomocą wskaźnika) "nie można już przekazywać sekcji tablicy", co jest błędne. Nic nie jest łatwiejsze niż przypisanie wskaźnika do sekcji tablicowej przed przekazaniem jej jako argumentu do podprogramu. – Mephisto