Hallo
Ich möchte ein Progamm schreiben, das mir sagt welche
Matrix-Vektor-Multipilkation schneller ist:
Wozu brauchst Du das? Nur probieren oder was Konkretes?
for (i=0; ifeld[zeile][spalte]
heissen, damit Du mit
for zeile = 1 to zeilen
for spalte = 1 to spalten
res += feld[zeile][spalte]
sequentiell auf die je in einer Zeilen hintereinander
liegenden Daten herankommst.
oder
for (j=0; j
#include
int main (void)
{
double t, t1, t2, c[100], a[100][100], b[100];
int size, i, j;
size = 100;
t1=clock();
clock() nutzt den Systemtimer mit schlechter Auflösung,
damit kannst Du hier nichts anfangen.
Du brauchst eine Funktion, die Dir die Anzahl
der abgelaufenen Prozessorzyklen anzeigt (RDTSC).
for (i=0; i QWORD tsc_ticks()
{
#ifdef _MSC_VER
// disable „no return value“ warning
#pragma warning( disable : 4035 )
_asm xor eax, eax
_asm xor edx, edx
_asm rdtsc // _asm _emit 0x0f // _asm _emit 0x31
#else
__asm__ (
„xorl %eax, %eax\n“
„xorl %edx, %edx\n“
„rdtsc“);
#endif
}Dann musst Du noch darauf achten, einen 64-bit int-typ
QWORD zu definieren, z.B.
#ifdef \_MSC\_VER
// --- Win32 Microsoft C++ defines INT64 data item ---
typedef \_\_int64 QWORD;
// #elseif Dann sollte es gehen.
Bei gcc/x64 reicht es, wenn Du "long" oder "int" nimmst,
ist dann 64 bit.
> Vorraussetung ist, dass die Vektorenelemente hintereinander im
> Speicher angeordnet sind. Jedoch sehe ich bei der Ausgabe das
> dies nicht der Fall ist :
Das ist schon der Fall. Um Dein Feld auszugeben,
machst Du einfach:
for (i=0; i**size; i++) // und <u>nicht</u>
printf("Adresse: %p c[%i]= %f\n",&c[i], i, c[i]);**
> Wie kann ich sicherstellen, das die Werte hintereinander
> angeordnet sind?
Schreibe 1 bis 100 in das Feld c und gib es wieder aus.
Grüße
CMБ